Pagini recente » monthly-2012/runda-3/solutii | Cod sursa (job #557340) | Cod sursa (job #526645) | Cod sursa (job #991045) | Cod sursa (job #2280790)
#include <iostream>
#include <fstream>
using namespace std;
const int m=9973;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
struct numere
{
int nr,ex;
};
numere v[50];
long long int lv=0,nr;
void desc(long long int nr)
{
long long int p=0;
lv=0;
if(nr%2==0)
{
while(nr%2==0)
{
p++;
nr/=2;
}
v[1].nr=2;
v[1].ex=p;
lv++;
}
for(int i=3; i*i<=nr; i+=2)
{
p=0;
if(nr%i==0)
{
while(nr%i==0)
{
nr/=i;
p++;
}
v[++lv].nr=i;
v[lv].ex=p;
}
}
if(nr>1)
{
v[++lv].nr=nr;
v[lv].ex=1;
}
}
long long powlg(long long int a,long long int b)
{
long long int val=1;
while(b!=0)
{
if(b%2==0)
{
a*=a;
b/=2;
}
else
{
b--;
val*=a;
}
}
return val;
}
int main()
{
long long int a,b,t,nr,i,s,nrdv=1;
f>>t;
for(i=1; i<=t; i++)
{
f>>nr;
nrdv=1;
s=1;
desc(nr);
for(int j=1; j<=lv; j++)
{
b=v[j].ex;
b++;
a=v[j].nr;
nrdv*=b;
long long int p=powlg(a,b);
a--;
p--;
p/=a;
s*=p;
s%=m;
}
g<<nrdv<<" "<<s<<'\n';
}
return 0;
}