Cod sursa(job #953964)

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

const int mo=9973;

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

int pw(int x,int 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<=1000000;i++)
		if (w[i]==0)
		{
			p[++k]=i;
			for (j=i*i;j<=1000000;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;
		}
		g << p1 << ' ' << p2 << "\n";
	}
	return 0;
}