Cod sursa(job #29709)

Utilizator skyelHighScore skyel Data 9 martie 2007 20:04:32
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream.h>

#define Nmax 2000010
#define input "fractii.in"
#define output "fractii.out"
int a[Nmax];
long b[30];
long t;

void tot(long p)
	{
	long i=2;
	t=p;
	while(i<=p&&p>1)
		{
		if((a[i]==0)&&(p%i==0))
			{
			t=t*(i-1)/i;
			while(p%i==0)
				p=p/i;
			if(a[p]==0)
				{
				t=(t/p)*(p-1);
				break;
				}
			}
		i++;
		}
	}
int main()
	{
	memset(b,0,30);

	long n,p,q,nr;
	int i,ok,k;
	ifstream fin(input);
	ofstream fout(output);
	fin>>n;
	a[1]=1;
	nr=1;
	for(i=2;i<=n;i++)
		a[i]=0;
	for(p=2;p<=n;p++)
		{
		if(a[p]==0)
			{
			nr+=2*(p-1);
			for(q=p+p;q<=n;q+=p)
				a[q]=1;
			}
		else
			{
			tot(p);
			nr+=2*t;
			}
		i=0;

		while(nr!=0)
			{
			b[i]+=nr%10;
			nr/=10;
			for(k=i;k<=25;k++)
				if(b[k]>9)
					{
					b[k]=b[k]%10;
					b[k+1]++;
					}
			i++;
			}
		}
	ok=0;
	for(i=29;i>=0;i--)
			{
			if(ok==1)
				fout<<b[i];
			else
				if(b[i]!=0)
					{
					ok=1;
					fout<<b[i];
					}
			}
	fout<<"\n";
	fin.close();
	fout.close();
	return 0;
	}