Pagini recente » Cod sursa (job #1205544) | Cod sursa (job #2196101) | Cod sursa (job #1919908) | Cod sursa (job #2166164) | Cod sursa (job #655179)
Cod sursa(job #655179)
#include <iostream>
#include <bitset>
#include <cstdio>
using namespace std;
#define MAXP 1000000
#define MOD 9973
typedef long long int64;
//<parsing>
FILE* fin=fopen("ssnd.in","r");
const unsigned maxb=8192;
char buf[maxb];
unsigned ptr=0;
inline int64 getInt(){
int64 nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if(++ptr>=maxb)
fread(buf,maxb,1,fin),ptr=0;
while('0'<=buf[ptr]&&buf[ptr]<='9'){
nr=nr*10+buf[ptr]-'0';
if(++ptr>=maxb)
fread(buf,maxb,1,fin),ptr=0;
}
return nr;
}
//</parsing>
FILE* fout=fopen("ssnd.out","w");
int prim[80000],np=0;
bitset<MAXP> era;
inline int pow(int a, int p){
int x = a % MOD, 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 = getInt(), n = nr;
int nd = 1, d = 0, sd = 1;
while ((int64)prim[d]* prim[d] <= nr){
if(nr % prim[d] == 0){
int p = 0;
while(n % prim[d] == 0){
++p;
n /= prim[d];
}
nd *= p + 1;
sd = (((sd * ((pow(prim[d], p + 1) - 1) % MOD)) % MOD) * (pow(prim[d]-1, MOD - 2) % MOD)) % MOD;
}
d++;
}
if (n > 1){
nd <<= 1;
sd = (((sd* ((n*n - 1) % MOD))% MOD)*(pow(n-1, MOD-2)))%MOD;
}
fprintf(fout,"%d %d\n", nd, sd);
}
int main(){
ciur();
for(int i = 0, t = getInt(); i < t; i++){
doTest();
}
fclose(fin);
fclose(fout);
return 0;
}