Pagini recente » Cod sursa (job #1123554) | Cod sursa (job #2528385) | Cod sursa (job #177021) | Cod sursa (job #2552667) | Cod sursa (job #172462)
Cod sursa(job #172462)
#include<iostream>
#include<conio.h>
using namespace std;
long a[20];
long nrelem(long n, long a[20], int m)
{
long s=0;
for(long i=1;i<(1<<m);i++)
{
long p=1,nr=0, t=i, c;
for(int j=1;j<=m;j++)
{
c=1 & t;
t=t>>1;
if(c)
p=p*a[j];
nr+=c;
}
if(nr%2==1)
s+=n/p;
else
s-=n/p;
}
return n-s;
/*int nr=0;
int p=1,k=1;
long s=0;
memset(st,0,sizeof(st));
while(k)
if(k==m+1)
{
if(nr>0)
{
if(nr%2==1)
s=s+n/p;
else
s-=n/p;
}
k--;
if(st[k]==2)
{
p/=a[k];
nr--;
}
}
else
if(st[k]<2)
{
st[k]++;
if(st[k]==2)
{
p*=a[k];
nr++;
}
k++;
}
else
{
st[k--]=0;
if(st[k]==2)
{
p/=a[k];
nr--;
}
}
return n-s;*/
}
long fracnum(long x, long n)
{
long d=2;
int m=0;
while(x>1)
{
if(x%d==0)
{
a[++m]=d;
while(x%d==0)
x/=d;
}
d++;
}
return nrelem(n,a,m);
}
int main()
{
ifstream f("fractii.in");
ofstream g("fractii.out");
long n;
f>>n;
//n=1000000;
long long s=0L;
for(int i=1;i<=n;i++)
{
//if(i%10000==0)
//cout<<i<<endl;
s+=fracnum(i,n);
}
//cout<<s<<endl;
g<<s;
f.close();
g.close();
return 0;
}
/*#include<iostream>
using namespace std;
long cmmdc(long a, long b)
{
long r;
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void main()
{
long n=100000;
long k=0;
for(long i=1;i<=n;i++)
{
for(long j=1;j<=n;j++)
if(cmmdc(i,j)==1)
k++;
if(i%1000==0)
cout<<i<<endl;
}
cout<<k<<endl;
}*/