Pagini recente » Cod sursa (job #2942237) | Cod sursa (job #1309260) | Cod sursa (job #2382348) | Cod sursa (job #2808859) | Cod sursa (job #1108336)
#include <iostream>
#include <fstream>
#define mod 9973
#define maxn 1000000
#include <cstring>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
bool c[maxn];
int prime[maxn];
int ct;
void ciur()
{
int i,j;
c[0]=1;
c[1]=1;
for(i=4;i<=maxn;i+=2)
c[i]=1;
for(i=3;i*i<=maxn;i+=2)
if(c[i]==0)
for(j=i*i;j<=maxn;j=j+2*i)
c[j]=1;
for(i=2;i<=maxn;i++)
if(c[i]==0)
prime[++ct]=i;
}
int lgpow(int b,int p)
{
if(p==0)
return 1;
if(p==1)
return b%mod;
if(p%2==0)
return (lgpow(b*b%mod,p/2))%mod;
else
return (b*lgpow(b*b%mod,(p-1)/2))%mod;
}
void solve(int x)
{
int i,d[50],p[20],ct2=0;
memset(d,0,sizeof(d));
int lim=x,y;
for(y=1,i=prime[y];i*i<=lim&&x!=1&&y<=ct;y++)
{
i=prime[y];
if(x%i==0)
{
ct2++;
p[ct2]=i;
while(x%i==0)
{
x=x/i;
d[ct2]++;
}
}
}
if(x>1)
{
p[++ct2]=x;
d[ct2]=1;
}
int nr=1,sum=1;
for(i=1;i<=ct2;i++)
{
nr=nr*(d[i]+1);
sum=(sum % mod)*((lgpow(p[i],d[i]+1)-1)%mod)*(lgpow(p[i]-1,mod-2)%mod);
}
out<<nr<<" "<<sum%mod<<"\n";
}
int main()
{
int t,n;
in>>t;
ciur();
while(t--)
{
in>>n;
solve(n);
}
return 0;
}