Cod sursa(job #442616)

Utilizator Teodor94Teodor Plop Teodor94 Data 14 aprilie 2010 21:06:41
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<cstdio>

const int N=10005;
const int MOD=9973;

bool prim[N];
int p[N],nr;

void ciur()
{
	for (int i=2;i<N;i++)
		if (!prim[i])
		{
			nr++;
			p[nr]=i;
			for (int j=i*i;j<N;j+=i)
				prim[j]=true;
		}
}

int pow(int x,int p)
{
	int rez=1;
	x%=MOD;
	for (;p;p>>=1)
	{
		if (p&1)
		{
			rez*=x;
			rez%=MOD;
		}
		x*=x;
		x%=MOD;
	}
	return rez;
}

void rez(int x)
{
	int nd=1,sd=1;
	int nn=x;
	for (int i=1;1LL*p[i]*p[i]<=x;i++)
	{
		if (x%p[i])
			continue;
		int pp=0,s=1;
		while (nn%p[i]==0)
		{
			x/=p[i];
			s*=p[i];
			pp++;
		}
		nd*=(pp+1);
		sd*=((1LL*s*p[i]-1)%MOD);
		sd%=MOD;
		sd*=pow(p[i]-1,MOD-2);
		sd%=MOD;
	}
	if (nn>1)
	{
		nd*=2;
		sd*=((1LL*nn*nn-1)%MOD);
		sd%=MOD;
		sd=pow(nn-1,MOD-2);
		sd%=MOD;
	}
	printf("%d %d\n",nd,sd);
}

int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	ciur();
	int n;
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
	}
	return 0;
}