Cod sursa(job #584376)

Utilizator informatician28Andrei Dinu informatician28 Data 25 aprilie 2011 10:40:50
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include<cstdio>
#include<fstream>
#include<cmath>
using namespace std;
long long p,s,nr,k,s1,var,m=9973;
int prim(long long nu)
{int ok,d;
ok=1;
for(d=2;d<=sqrt(nu);d++)
if(nu%d==0) ok=0;
return ok;
}
 
long long put(int baza,int expo)  
{if(expo==1) {return baza;} 
if(expo&1) {return (baza*put(baza,expo-1)%m)%m;}
else {var=put(baza,expo/2); return (var*var)%m;}
}
int main()
{int j,fm,t,n,i;
freopen("ssnd.in","r",stdin);
ofstream g("ssnd.out");
scanf("%d",&t);
for(i=1;i<=t;i++)
{scanf("%lld", &nr); n=s=1;  if(prim(nr)) {n*=2; s*=(nr+1); } else {j=2;
do
{fm=0;
while(nr%j==0) {fm++; nr/=j;} n*=(fm+1);
s*=(put(j,fm+1)-1)/(j-1);
j++;
}while(nr!=1);
}
g<<n<<" "<<s%m<<'\n';}
return 0;
}