Pagini recente » Cod sursa (job #2631183) | Cod sursa (job #2470160) | Cod sursa (job #1680835) | Cod sursa (job #1071231) | Cod sursa (job #2336095)
#include <iostream>
#include <fstream>
using namespace std;
const int supp=1e6+1;
const int mod=9973;
const int Maxx=1e6+1;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool prim[supp+3];
int nr[Maxx];
int tot;
int test;
void ciur(){
prim[0]=1;
prim[1]=1;
for (int i=2,j;i<supp-1;++i){
if (!prim[i]){
nr[++tot]=i;
for (j=i+i;j<supp;j+=i) prim[j]=1;
}
}
}
int pow(int a,int b){
if (b!=1){
if (b%2==0) return pow(a*a%mod,b/2)%mod;
else return a*pow(a*a%mod,b/2)%mod;
}
return a;
}
int i,exp,a;
int sum=1,nrd=1;
int main() {
fin>>test;
ciur();
int s1,s2;
for(;test;--test){
fin>>a;
sum=nrd=1;
for (i=1;i<=tot && 1LL*nr[i]*nr[i]<=a;++i){
if (a%nr[i]==0){
exp=0;
while (a%nr[i]==0){
a/=nr[i];
++exp;
}
nrd*=(exp+1);
s1=(pow(nr[i],exp+1)-1)%mod;
s2=pow(nr[i]-1,mod-2)%mod;
sum=((sum*s1)%mod*s2)%mod;
}
}
if (a>1){
nrd*=2;
sum=(1LL*sum*(a+1));
}
fout<<nrd<<" "<<sum%mod<<"\n";
}
return 0;
}