Cod sursa(job #29313)

Utilizator skyelHighScore skyel Data 8 martie 2007 22:52:53
Problema Fractii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream.h>


#define input "fractii.in"
#define output "fractii.out"
char a[10000];
int b[30];
long tot(long p)
	{
	long i=2;
	long t=p;
	while(i<=p)
		{
		if(a[i]!='1'&&p%i==0)
			{
			t=t*(i-1)/i;
			while(p%i==0)
				p=p/i;
			if(a[p]!='1')
				{
				t=t*(p-1)/p;
				break;
				}
			}
		i++;
		}

	return t;
	}
int main()
	{
	int h,i,ok,k;
	memset(b,0,30);
	long n,p,q,nr;
	ifstream fin(input);
	ofstream fout(output);
	fin>>n;

	a[1]='1';
	nr=1;
	for(p=2;p<=n;p++)
		{
		if(a[p]!='1')
			{
			nr+=2*(p-1);
			for(q=p+p;q<=n;q=q+p)
				a[q]='1';
			}
		else
			nr+=2*tot(p);
		i=0;
		while(nr!=0)
			{
			b[i]+=nr%10;
			for(k=i;k<=25;k++)
				if(b[k]>9)
					{
					b[k]=b[k]%10;
					b[k+1]++;
					}
			nr/=10;
			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;
	}