Pagini recente » Borderou de evaluare (job #2002041) | Borderou de evaluare (job #2889578) | Cod sursa (job #832627) | Cod sursa (job #1677073) | Cod sursa (job #629270)
Cod sursa(job #629270)
#include <stdio.h>
#define N 500000
char l[N+10];
int pr[79000],p[N+10],n[N+10],i,k=1;
long long j,np=1,m,n1,n2;
short t,d,s;
int main ()
{
FILE * in=fopen ("ssnd.in","r");
FILE * out=fopen ("ssnd.out","w");
pr[0]=2;
for (i=0; i<=N; i++) l[i]=0;
while ((2*k+1)*(2*k+1)<=2*N){
while (l[k]) k++;
pr[np++]=2*k+1;
for (j=2*k+1; j<=2*N; j+=(4*k+2)) l[j/2]=1;
k++;
}
for (k=k+1; k<N; k++) if (!l[k]) pr[np++]=2*k+1;
fscanf (in,"%hd",&t);
for (i=0; i<t; i++)
{
fscanf (in,"%lld",&n1);
s=d=1;
for (m=0; pr[m]*pr[m]<=n1; m++)
{
j=pr[m];
if (!(n1%j))
{
n2=n1;
k=1;
while (!((n1=n1/j)%j)) k++;
d*=(k+1);
s=s*(n2/n1*j-1)/(j-1)%9973;
}
}
if (n1!=1)
{
d+=d;
s=s*(n1*n1-1)/(n1-1)%9973;
}
fprintf (out,"%hd %hd\n",d,s);
}
fclose (in);
fclose (out);
return 0;
}