Pagini recente » Cod sursa (job #2246367) | Cod sursa (job #2931674) | Cod sursa (job #1510968) | Cod sursa (job #1236224) | Cod sursa (job #2581231)
#include <bits/stdc++.h>
#define ULL unsigned long long
using namespace std;
ifstream in("fractii.in");
ofstream out("fractii.out");
int n;
int vf[3000001],urm[3000001],last[1000001],nrG;
int Div[20];
bitset <1000001> viz;
ULL sum;
void adauga(int nr,int val)
{
vf[++nrG]=val;
urm[nrG]=last[nr];
last[nr]=nrG;
}
void Ciur()
{
for(int i=2;i<=n;i++)
if(!viz[i])
{
adauga(i,i);
for(int j=2*i;j<=n;j+=i)
{
viz[j]=1;
adauga(j,i);
}
}
}
int main()
{
in>>n;
Ciur();
sum+=(ULL)n*n;
for(int i=2,val=0;i<=n;i++,val=0)
{
for(int k=last[i];k;k=urm[k])
Div[val++]=vf[k];
for(int j=1,nrD=0,Z=1;j<(1<<val);j++,nrD=0,Z=1)
{
for(int k=0;k<val;k++)
if(j&(1<<k))
{
nrD++;
Z*=Div[k];
}
sum+=(nrD%2?-n/Z:n/Z);
}
}
out<<sum;
return 0;
}