Cod sursa(job #660730)

Utilizator emle98Emanuel Silivasan emle98 Data 13 ianuarie 2012 12:38:43
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

int prime[78500]; //
int sita[1000001];
int euler(long long n)
{
	int dummy = n, p=0,ct;
	//cout << dummy << endl;
	while (n>1)
	{
		ct=0;
		while (n%prime[p] == 0)
			n = n/prime[p],ct++;
		if (ct>0)
			dummy = dummy/prime[p]*(prime[p]-1);
		if (n==1)
			return dummy;
		if (sita[n]==0)
		{
			dummy = dummy/n*(n-1);
			return dummy;
		}
		//cout << p << " " << ct << " " << dummy <<  endl;
		p++;
	}
	//return dummy;
}


int main(void)
{
	
	ifstream fin("fractii.in");
	ofstream fout("fractii.out");
	int a,x,i=0,n;
	long long ct=0;
	fin>>n;
	
	
	for (x=2;x<=n;x++)
		if (sita[x] == 0)
		{
			prime[i++] = x;
			a = 2*x;
			while (a<=n)
			{
				sita[a]=1;
				a=a+x;
			}
		}
/*
	for (x = 0;x<i;x++)
		cout << prime[x]<< " ";
*/		
	for(x=2;x<=n;x++)
	{
		
		ct += euler(x);		
//		cout << x << " " << euler(x) << endl;
	}
	ct=2*(ct)+1;
	fout<<ct;

	return 0;
}