Pagini recente » Cod sursa (job #3225134) | Cod sursa (job #1885955) | Cod sursa (job #997626) | Cod sursa (job #1340583) | Cod sursa (job #440905)
Cod sursa(job #440905)
#include <iostream>
#include <bitset>
using namespace std;
FILE* fin=fopen("ssnd.in","r");
FILE* fout=fopen("ssnd.out","w");
#define MAXP 1000000
#define MOD 9973
typedef long long int64;
int prim[80000],np=0;
bitset<MAXP> era;
inline int pow(int a,int p){
int x=a,r=1;
while(p){
if(p&1){
r=(r*x)%MOD;
}
x=(x*x)%MOD,p>>=1;
}
return r;
}
void ciur(){
for(int i=1;((i*i)<<1)+(i<<1)<MAXP;++i){
if(!era[i]){
for(int j=((i*i)<<1)+(i<<1);(j<<1)+1<MAXP;j+=(i<<1)+1){
era[j]=true;
}
}
}
prim[np++]=2;
for(int i=1;(i<<1)+1<MAXP;i++){
if(!era[i]){
prim[np++]=(i<<1)+1;
}
}
}
void doTest(int64 nr){
int64 n=nr;
int nd=1,sd=1,d=0,p=0,sp;
while(int64(prim[d])*int64(prim[d])<=nr){
p=0,sp=prim[d];
while(n%prim[d]==0){
p++,n/=prim[d],sp*=prim[d];
}
if(p!=0){
nd=(nd*((p+1)%MOD))%MOD;
sd=(((sd*((int64(sp) - 1) % MOD))%MOD)*(pow(prim[d]-1, MOD-2)))%MOD;
}
d++;
}
if(n>1){
nd=(nd*2)%MOD;
sd=(((sd*((int64(n)*n - 1) % MOD))%MOD)*(pow(n-1, MOD-2)))%MOD;
}
fprintf(fout,"%d %d\n",nd,sd);
}
int main(){
int t,k;
ciur();
fscanf(fin,"%d ",&t);
for(int i=0;i<t;i++){
fscanf(fin,"%d\n",&k);
doTest(k);
}
fclose(fin);
fclose(fout);
return 0;
}