Pagini recente » Cod sursa (job #2889159) | Cod sursa (job #3140618) | Cod sursa (job #1039943) | Cod sursa (job #2797429) | Cod sursa (job #1995109)
#include<fstream>
#include<bitset>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int MOD=9973;
bitset<1000005>ciur;
unsigned long long prim[80000],k;
void c(){
int n=1000000,i,j;
ciur[0]=ciur[1]=1;
for(i=4;i<=n;i+=2)
ciur[i]=1;
for(i=3;i*i<=n;i+=2)
if(!ciur[i])
for(j=i*i;j<=n;j+=i)
ciur[j]=1;
prim[++k]=2;
for(i=3;i<=n;i+=2)
if(!ciur[i])
prim[++k]=i;
}
unsigned long long pwr(unsigned long long a,unsigned long long n){
if(n==1)
return a;
else{
if(n%2==0)
return pwr(a,n/2)*pwr(a,n/2);
else
return a*pwr(a,n-1);
}
}
pair<int,int> divs(unsigned long long n){
unsigned long long nrdiv=1,sumdiv=1,cnt,i=3;
if(n%2==0){
cnt=0;
while(n%2==0){
++cnt;
n/=2;
}
nrdiv*=(cnt+1);
sumdiv*=(pwr(2,cnt+1)-1)%MOD;
}
for(i=1;i<=k&&1LL*prim[i]*prim[i]<=n;++i)
if(n%prim[i]==0){
cnt=0;
while(n%prim[i]==0){
n/=prim[i];
++cnt;
}
nrdiv*=(cnt+1);
sumdiv*=(pwr(prim[i],cnt+1)-1)/(prim[i]-1)%MOD;
}
if(n>1){
nrdiv*=2;
sumdiv*=(pwr(n,2))/(n-1)%MOD;
}
pair<unsigned long long,unsigned long long>a=make_pair(nrdiv,sumdiv%MOD);
return a;
}
int main(){
int t;
fin>>t;
c();
while(t--){
unsigned long long nr;
fin>>nr;
pair<unsigned long long,unsigned long long>a=divs(nr);
fout<<a.first<<' '<<a.second<<'\n';
}
}