Pagini recente » Cod sursa (job #493662) | Cod sursa (job #493668) | Cod sursa (job #1896533) | Cod sursa (job #493667) | Cod sursa (job #493669)
Cod sursa(job #493669)
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
int main()
{
int n,count[1000001],curent=0,mark[1000001];
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;
}
long long int sum=0;
sum+=count[1];
for(int i=2;i<=n;i++)
sum+=n-count[i];
out<<sum<<endl;
in.close();
out.close();
}