Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- #define maxn 1000006
- bool mark[maxn];
- ll isprime[maxn],psize=0,M[maxn],mu[maxn];
- void sieve()
- {
- mark[0]=true;
- mark[1]=true;
- for(ll i=2;i*i<=maxn;i++)
- {
- if(mark[i]==false)
- {
- for(ll j=i*i;j<=maxn;j+=i)
- mark[j]=true;
- }
- }
- for(ll i=2;i<=maxn;i++)
- {
- if(mark[i]==false)
- isprime[psize++]=i;
- }
- }
- ll primefact(ll x)
- {
- ll i,j,k,a,b,c,d,e,cnt=0,n=x;
- for(i=0;i<=psize && isprime[i]*isprime[i]<=n;i++)
- {
- if(n%isprime[i]==0)
- {
- cnt++;
- if(n%(isprime[i]*isprime[i])==0)
- {
- cnt=-1000;
- break;
- }
- n/=isprime[i];
- }
- }
- if(n!=1)
- cnt++;
- return cnt;
- }
- void save()
- {
- ll cnt=0,i,j,k;
- M[1]=1,mu[1]=1;
- for(i=2;i<=1000000;i++)
- {
- ll cnt=primefact(i);
- if(cnt<0)
- mu[i]=0;
- else if(cnt%2==0)
- mu[i]=1;
- else
- mu[i]=-1;
- M[i]=M[i-1]+mu[i];
- }
- }
- int main()
- {
- sieve();
- save();
- ll n;
- while(cin>>n && n)
- {
- printf("%8lld%8lld%8lld\n",n,mu[n],M[n]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement