Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int isprime[6000000+6],psize=0;
- bool mark[6000000+6];
- int arr[6000000+5];
- void sieve()
- {
- int i,j,k;
- mark[0]=true;
- mark[1]=true;
- for(i=0;i*i<=6000000;i++)
- {
- if(mark[i]==false)
- {
- for(j=i*i;j<=6000000;j+=i)
- {
- mark[j]=true;
- }
- }
- }
- psize=0;
- for(i=2;i<=6000000;i++)
- {
- if(mark[i]==false)
- isprime[psize++]=i;
- }
- }
- int prime_fact(int n)
- {
- int i,j,k,sum=0,cnt=0;
- for(i=0;isprime[i]*isprime[i]<=n;i++)
- {
- if(n%isprime[i]==0)
- {
- cnt=0;
- while(n%isprime[i]==0)
- {
- cnt++;
- n/=isprime[i];
- }
- sum+=isprime[i];
- }
- }
- if(n!=1)
- sum+=n;
- if(mark[sum]==false)
- return 1;
- else
- return 0;
- }
- int main()
- {
- sieve();
- int i ,j,k,a,b,c,d,e;
- arr[1]=1;
- for(i=2;i<=5000006;i++)
- {
- arr[i]=arr[i-1]+prime_fact(i);
- }
- while(cin>>a && a)
- {
- cin>>b;
- cout<<arr[b]-arr[a-1]<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement