Cod sursa(job #372429)

Utilizator titusuTitus C titusu Data 10 decembrie 2009 00:35:30
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <iostream>
using namespace std;
int prime[200000], nrprime, e[1000001];

void eratostene(){
	e[0]=e[1]=1;
	for(int i=1;i<=1000;i++)
		if(e[i]==0)
			for(int j=2;i*j<=1000000;j++)
				e[i*j]=1;
	for(int i=1;i<=1000000;i++)
		if(e[i]==0)
			prime[++nrprime]=i;
}


int fi(int n){
	int produs=n;
	int p,d=1;
	while(n>1){
		p=0;
		while(n%prime[d]==0)
			n /= prime[d], p++;
		if(p)
			produs -= produs/prime[d];
		d++;
		if(prime[d]*prime[d] > n && n>1)
		{
			produs -= produs/n;
			n=1;
		}
	}
	return produs;
}

int main(){
	eratostene();
	ifstream fin("fractii.in");
	int n;
	fin>>n;
	long long int sum=1;
	for(int i=2;i<=n;i++){
		//cout<<i<<" "<<fi(i)<<"\n";
		sum+= 2 * fi(i);
	}
	ofstream fout("fractii.out");
	fout<<sum<<endl;
	return 0;
}