Pagini recente » Cod sursa (job #1240839) | Cod sursa (job #2604302) | Cod sursa (job #3147149) | Cod sursa (job #1269065) | Cod sursa (job #2780337)
#include <bits/stdc++.h>
#define io_file(name) std::ifstream fin(name".in"); std::ofstream fout(name".out");
#define MAXN 1000000
using namespace std;
io_file("data")
bitset <MAXN+5> f;
int prime, p[MAXN/10];
int cnt, d[20], put, par, prd;
int n, x, sol;
int main (){
f[0]=f[1]=1;
for(int i=4; i<=MAXN; i+=2)
f[i]=1;
for(int i=3; i<=MAXN/i; i+=2)
if(f[i] == 0)
for(int j=i*i; j<=MAXN; j+=i)
f[j]=1;
p[++prime]=2;
for(int i=3; i<=MAXN; i+=2)
if(f[i] == 0)
p[++prime]=i;
fin>>n;
for(int i=2; i<=n; i++){
x=i; cnt=0;
for(int j=1; p[j]<=x/p[j] && j <= prime; j++){
put=0;
while(x%p[j] == 0){
put++;
x/=p[j];
}
if(put != 0)
d[cnt++]=p[j];
}
if(x != 1)
d[cnt++]=x;
for(int j=1; j<(1 << cnt); j++){
par=0;
prd=1;
for(int jj=0; jj<cnt; jj++)
if(((j>>jj)&1) == 1){
prd*=d[jj];
par=1-par;
}
if(par == 0)
sol -= n/prd;
else
sol += n/prd;
}
}
fout<<1LL*n*n-sol;
return 0;
}