Pagini recente » Cod sursa (job #1077799) | Cod sursa (job #1505431) | Cod sursa (job #1400085) | Istoria paginii runda/bravo5/clasament | Cod sursa (job #493667)
Cod sursa(job #493667)
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
int main()
{
int n,count[1000001],mark[1000001],curent=0;
ifstream in("fractii.in");
ofstream out("fractii.out");
in>>n;
count[1]=n;
for(int i=2;i<=n;i++)
count[i]=1;
memset(mark,0,sizeof(mark));
for(int i=2;i<=n;i++)
{
int marked=0,j;
if(mark[i]==1)
marked++;
curent=1;
for(j=i+i;j<=n;j+=i)
{
count[j]+=curent;
++curent;
if(mark[j]==1)
{
count[j]-=marked;
++marked;
}
}
j-=i;
if(mark[j]==1)
marked=1;
else
marked=0;
curent=1;
j-=i;
for(;j>=0;j-=i)
{
count[j]+=curent;
++curent;
if(mark[j]==1)
{
count[j]-=marked;
++marked;
}
}
for(j=i+i;j<=n;j+=i)
mark[j]=1;
mark[i]=1;
}
int sum=0;
sum+=count[1];
for(int i=2;i<=n;i++)
sum+=n-count[i];
out<<sum<<endl;
in.close();
out.close();
}