Pagini recente » Cod sursa (job #1075747) | Cod sursa (job #2603531) | Cod sursa (job #493450) | Cod sursa (job #3293570) | Cod sursa (job #516754)
Cod sursa(job #516754)
#include<stdio.h>
#include<math.h>
long put(long x,long n)
{if(n==0)
return 1;
if(n%2==0)
return put(x,n/2)*put(x,n/2);
else
return x*put(x,(n-1)/2)*put(x,(n-1)/2);}
int main()
{int test,l;
long n,t,nr,s,j,i,k,d[40000],p[40000],v[40000],u;
char a[40000];
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d\n",&test);
for(u=1;u<=test;u++)
{scanf("%ld\n",&n);
for(i=1;i<=sqrt(n);i++)
{a[i]='0';
d[i]=0;}
j=2;
i=1;
t=n;
while(j*j<=n)
{if(a[j]=='0')
{while(t!=1)
{if(t%j==0)
{d[i]++;
t/=j;
if(t==1)
{p[i]=j;
i++;}}
else
{if(d[i]!=0)
{p[i]=j;
i++;}
break;}}
for(l=2;l*j<=n;l++)
if(a[l*j]=='0')
a[l*j]='1';}
j++;}
if(t!=1)
{d[i]=1;
p[i]=t;
i++;}
s=1;
nr=1;
for(j=1;j<i;j++)
{nr=nr*(d[j]+1);
s=s*(put(p[j],d[j]+1)-1)/(p[j]-1);}
if(s==1)
{nr=2;
s+=n;}
printf("%ld %ld\n",nr,s%9973);}
fclose(stdin);
fclose(stdout);
return 0;}