Pagini recente » Cod sursa (job #573563) | Cod sursa (job #639023) | Cod sursa (job #1975123) | Cod sursa (job #3270148) | Cod sursa (job #1463801)
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int n,v[1000000];
int cmmmc(int x,int y)
{
int a,b,r,c;
a=x;
b=y;
r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
c=x*y/b;
return c;
}
int minimdiv(int x)
{
int i;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return i;
return x;
}
int scad(int x)
{
int r;
r=n%x;
return (n-r)/x;
}
int sumaplus(int x)
{
int adaug=n,aux,i,j;
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
{
if((x/i)%i==0)
{
if(v[minimdiv(i)]==0)
{
adaug-=scad(minimdiv(i));
v[minimdiv(i)]=1;
}
}
else
{
if(v[minimdiv(i)]==0)
{
adaug-=scad(minimdiv(i));
v[minimdiv(i)]=1;
}
if(v[minimdiv(x/i)]==0)
{
adaug-=scad(minimdiv(x/i));
v[minimdiv(x/i)]=1;
}
}
}
}
if(v[minimdiv(x)]==0)
{
adaug-=scad(minimdiv(x));
v[minimdiv(x)]=1;
}
for(i=1;i<n;i++)
if(v[i]==1)
for(j=i+1;j<=n;j++)
if(v[j]==1)
{
aux=cmmmc(i,j);
if(v[aux]==0)
{
adaug+=scad(aux);
v[aux]=1;
}
}
for(i=1;i<=n;i++)
v[i]=0;
return adaug;
}
int main()
{
int s,i;
fin>>n;
s=n;
for(i=2;i<=n;i++)
s+=sumaplus(i);
fout<<s<<"\n";
return 0;
}