Cod sursa(job #2225696)

Utilizator shantih1Alex S Hill shantih1 Data 27 iulie 2018 23:56:33
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

ifstream fin("fractii.in");
ofstream fout("fractii.out");

long long n,i,j,k,rez,sq,nnr,a;
long long nd,dv[1000005],c[1000005],nr[100000],s[1000005];
bool pr[1000005];

int main () {
    
    fin>>n;
	sq=sqrt(n);
	for(i=2;i<=n;i++)
		if(pr[i]==0&&i<=sq)
		{
			nr[++nnr]=i;
			c[i]=1;
			for(j=i+i;j<=n;j+=i)
				pr[j]=1;
		}
	for(i=sq+1;i<=n;i++)
		if(pr[i]==0)
			nr[++nnr]=i,c[i]=1;
	
	for(i=2;i<=n;i++)
		if(c[i]||!pr[i])
		{	
			dv[++nd]=i;
			for(j=1;i*nr[j]<=n;j++)
				if(i%nr[j]>0)
					c[i*nr[j]]++;
		}
	
	for(i=1;i<=nd;i++)
	{
		a=dv[i];
		if(c[a]%2==1)	k=1;
		else			k=-1;
		for(j=a;j<=n;j+=a)
			s[j]+=k*j/a;
	}

	for(i=2;i<=n;i++)
		rez+=i-s[i];
	
	fout<<rez*2+1<<"\n";
}