Pagini recente » Cod sursa (job #2631768) | Cod sursa (job #722945) | Cod sursa (job #1750666) | Cod sursa (job #2103792) | Cod sursa (job #990591)
Cod sursa(job #990591)
#include <cstdio>
using namespace std;
int fact[10000],exp[10000],ciur[1000010],prim[100000],nr;
inline long long LgPut(int n, int p)
{
long long put=1,m;
m=1LL*n;
while(p>0)
{
if(p&1)
{
put=(put*m);
p--;
}
m=(m*m);
p=p>>1;
}
return put;
}
inline void Ciur()
{
int i,j;
for(i=3;i<=1000;i+=2)
if(ciur[i]==0)
for(j=i*i;j<=1000000;j+=2*i)
ciur[j]=1;
nr=1;prim[1]=2;
for(i=3;i<=1000000;i+=2)
if(ciur[i]==0)
prim[++nr]=i;
}
int main()
{
int i,len,t,k,d,sol1,poz,q,sol2;
long long n,a;
freopen ("ssnd.in","r",stdin);
freopen ("ssnd.out","w",stdout);
scanf("%d", &t);
Ciur();
for(q=1;q<=t;q++)
{
scanf("%lld", &n);len=0;
for(poz=1;poz<=nr;poz++)
{
k=0;d=prim[poz];
while(n%d==0)
{
k++;
n/=d;
}
if(k)
{
len++;
fact[len]=d;
exp[len]=k;
}
}
sol1=1;sol2=1;
for(i=1;i<=len;i++)
{
sol1=sol1*(exp[i]+1);
a=LgPut(fact[i],exp[i]+1);
a--;
a=a/(fact[i]-1);
sol2=(sol2*a)%9973;
}
printf("%d %d\n", sol1,sol2);
}
return 0;
}