Pagini recente » Cod sursa (job #336573) | Cod sursa (job #1874360) | Cod sursa (job #2229054) | Cod sursa (job #180759) | Cod sursa (job #863116)
Cod sursa(job #863116)
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <bitset>
#define md 9973
using namespace std;
FILE *f=fopen("ssnd.in","r");
FILE *g=fopen("ssnd.out","w");
int t,k,i,j,ok;
int v[80010],s,d,p,nr1,nr2;
long long y,x;
bitset <1000005> pu;
char pp[1000000];
int nr;
void ciur(int n)
{
int i, j;
for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
if ((pp[i >> 3] & (1 << (i & 7))) == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
pp[j >> 3] |= (1 << (j & 7));
}
}
}
v[nr=1]=2;
for (i = 1; 2 * i + 1 <= n; ++i)
if ((pp[i >> 3] & (1 << (i & 7))) == 0)
v[++nr]=2*i+1;
}
int ridic(int x, int put)
{
int sl=1,p=(x%md);
for (;put;put>>=1,p=(p*p)%md)
if (put&1)
{
sl=(sl*p)%md;
}
return sl;
}
int cn;
int main()
{
fscanf(f,"%d",&t);
ciur(1000005);
for (j=1;j<=t;j++){
d=1;
s=1;
fscanf(f,"%lld",&x);
//if (pu[x]==0) fprintf(g,"2 %lld\n",x+1); else {
ok=0;
y=x;
for (i=1;v[i]*v[i]<=y && x>1;i++)
if (x%v[i]==0)
{
k=0;p=1;ok=1; cn=0;
while (x % v[i]==0)
{x=x/v[i];
k++;
}
d=d*(k+1);
nr1=(ridic(v[i],k+1)-1)%md;
nr2=ridic(v[i]-1,md-2);
s=(((s*nr1)%md)*nr2)%md;
//if (x<1000005)
// if (pu[x]==0 ) {d=d*2; s=(s*((x*x-1)/(x-1)))%9973; break;}
}
if (x>1)
{
d=d*2;
s=(s*((x*x-1)/(x-1)))%9973;
}
if (d==1) fprintf(g,"2 %d\n",x+1); else
fprintf(g,"%d %d\n",d,s);
}
return 0;
}