Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <array>
- #include <vector>
- #include <math.h>
- #define PRIMES_SIZE 50
- std::vector<long> erat()
- {
- std::array<bool,PRIMES_SIZE> nums;
- nums.fill(true);
- for(long i(2); i <= ceil(sqrt(PRIMES_SIZE)); ++i)
- {
- if(nums[i-2])
- {
- for(long j(i*2); j-2 < PRIMES_SIZE; j += i)
- nums[j-2] = false;
- }
- }
- std::vector<long> res;
- for(long i(0); i < PRIMES_SIZE; ++i)
- {
- if(nums[i])
- res.push_back(i+2);
- }
- return res;
- }
- std::vector<long long> primors(const std::vector<long>& primes)
- {
- long long curr = 1;
- std::vector<long long> res;
- for(auto p : primes)
- {
- curr *= p;
- res.push_back(curr);
- }
- return res;
- }
- int main()
- {
- std::vector<long> primes(erat());
- std::vector<long long> primor(primors(primes));
- long rem = std::pow(*primes.rbegin(),2);
- double row_l = rem;
- for(int i(0); i < primes.size(); ++i)
- {
- //
- double inter_num;
- if(i == 0)
- inter_num = row_l;
- else
- inter_num = ceil(row_l / primor[i-1]);
- double rem_p_inter = (double)rem/inter_num;
- if(i > 2)
- rem_p_inter = floor(rem_p_inter);
- else
- rem_p_inter = rem_p_inter;
- rem = floor(std::max(0.0,rem_p_inter-2)*2/primes[i]*inter_num) + floor(rem_p_inter*std::max(1L,primes[i]-2)/primes[i]*inter_num);
- std::cout << rem << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement