Cod sursa(job #953979)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 27 mai 2013 21:48:17
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
using namespace std;

const long long mo=9973;

bool w[1000006];
long long p[500000],i,j,k,s,n,T,p1,p2;

long long pw(long long x,long long k)
{
	if (k==1)
		return x%mo;
	int y;
	if (k%2==0)
	{
		y=pw(x,k/2);
		return (y*y)%mo;
	}
	else return (pw(x,k-1)*x)%mo;
}
	
int main()
{
	ifstream f("ssnd.in");
	ofstream g("ssnd.out");
	for (i=2;i<=1000005;i++)
		if (w[i]==0)
		{
			p[++k]=i;
			for (j=i*i;j<=1000005;j+=i)
				w[j]=1;
		}
	f >> T;
	for (int I=1;I<=T;I++)
	{
		f >> n;
		p1=1;p2=1;
		for (i=1;p[i]*p[i]<=n;i++)
		{
			if (n%p[i]==0)
			{
				s=0;
				while (n%p[i]==0)
				{
					n/=p[i];
					s++;
				}
				p1=(p1*(s+1))%mo;
				p2=(p2*(pw(p[i],s+1)-1)%mo*pw(p[i]-1,mo-2))%mo;
			}
		}
		if (n>1)
		{
			s=1;
			p1=(p1*(s+1))%mo;
			p2=(p2*(pw(n,s+1)-1)%mo*pw(n-1,mo-2))%mo;
			if (p2<0)
				p2+=mo;
		}
		g << p1 << ' ' << p2 << "\n";
	}
	return 0;
}