Cod sursa(job #735575)

Utilizator misinozzz zzz misino Data 16 aprilie 2012 20:07:48
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#define MOD 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int n,nr,t,i,s,p1,p2,nd,m,nrd,sd;
int v[100000];
int putere(int n,int p)
{int x=1,nr=n;
while(p)
{if(p&1)
	x=(x*nr)%MOD;
nr=(nr*nr)%MOD;
p/=2;
}
return x;
}
bool a[1000001];
void ciur()
{int i,j;
v[1]=2;
for(i=3;i<=1000;i=i+2)
	if(a[i]==0)
		for(j=i*i;j<=1000000;j=j+i)
			a[j]=1;
nr=1;
for(i=3;i<=1000000;i=i+2)
	if(a[i]==0)
		++nr,v[nr]=i;
}
int main()
{f>>t;
ciur();
for(s=1;s<=t;++s)
{f>>n;
nrd=1;
sd=1;
m=n;
for(i=1;v[i]*v[i]<=m&&n!=1;++i)
	if(n%v[i]==0)
	{nr=0;
	while(n%v[i]==0)
	{++nr;
	n/=v[i];
	}
	nrd=(nrd*(nr+1))%MOD;
	p1=(putere(v[i],nr+1)-1)%MOD;
	p2=putere(v[i]-1,MOD-2)%MOD;
	sd=(((sd*p1)%MOD)*p2)%MOD;
	}
if(n!=1)
{nrd=(nrd*2)%MOD;
sd=(sd*(n+1))%MOD;
}
g<<nrd<<' '<<sd<<'\n';
}
return 0;
}