Pagini recente » Cod sursa (job #2144528) | Cod sursa (job #3193935) | Cod sursa (job #360293) | Cod sursa (job #742190) | Cod sursa (job #919481)
Cod sursa(job #919481)
#include <iostream>
#include <stdio.h>
#include <bitset>
#define MAX_N 1000002
#define MOD 9973
using namespace std;
FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");
bitset<MAX_N>prim;
long long b[MAX_N],t,i,nrdiv,j,a,put,sum,nr1,nr2;
long long ridic(long long a, long long p)
{
long long i,cn=a,nr=1;
for(i=0;(1<<i)<=p;i++)
{
if((1<<i)&p)nr=(nr*cn)%MOD;
cn=(cn*cn)%MOD;
}
return nr;
}
void ciur()
{
int i,j;
b[0]=1;
b[1]=2;
for(i=3;i<=1000;i+=2)
if(prim[i]==0)
{
b[++b[0]]=i;
for(j=2*i;j<=MAX_N;j+=i)
prim[j]=1;
}
for(i=1001;i<=MAX_N;i+=2)
if(prim[i]==0) b[++b[0]]=i;
}
int main()
{
fscanf(f,"%d",&t);
ciur();
for(i=1;i<=t;i++)
{
fscanf(f,"%lld",&a);
nrdiv=1;
j=1;
sum=1;
while(b[j]*b[j]<=a && a>1)
{
if(a%b[j]==0)
{
put=1;
while(a%b[j]==0){a/=b[j];put++;}
nr1=(ridic(b[j],put)-1)%MOD;
nr2=ridic(b[j]-1,9971)%MOD;
sum=(sum*nr1*nr2)%MOD;
nrdiv=nrdiv*put;
}
j++;
}
if(a>1)
{
nrdiv=nrdiv*2;
sum=(sum*((a+1)%MOD)%MOD);
}
fprintf(g,"%lld %lld\n",nrdiv,sum);
}
fclose(g);
return 0;
}