Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define N 2500 /// Pentru N 100000000/2/8+1 => sqrt(N)=2500
- using namespace std;
- char p[N+1];
- void Ciur()
- {
- for(int i=1;((i*i)<<1)+(i<<1)<=N;i+=1)
- {
- if((p[i>>3]&(1<<(i&7)))==0)
- {
- for(int j=((i*i)<<1)+(i<<1);(j<<1)+1<=N;j+=(i<<1)+1)
- {
- p[j>>3]|=(1<<(j&7));
- }
- }
- }
- }
- int FP(int x)
- {
- if(x%2==0)
- return 2;
- for(int i=1;(2*i+1)*(2*i+1)<=N;++i)
- if((p[i>>3]&(1<<(i&7)))==0&&(x%(2*i+1)==0))
- return 2*i+1;
- return x;
- }
- int main()
- {
- Ciur();
- int n;
- cin>>n;
- int x;
- unsigned long long int s=0;
- while(n--)
- cin>>x,s+=FP(x);
- cout<<s;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement