Pagini recente » Cod sursa (job #3186141) | Cod sursa (job #1804773) | Cod sursa (job #1666642) | Cod sursa (job #1726385) | Cod sursa (job #2565990)
#include <bits/stdc++.h>
#define Mod 9973
#define Dim 1000009
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
typedef long long ll;
ll T,y,lop,A[80000];
bool prim[Dim];
void Euclid(ll a,ll b,ll &x,ll &y)
{
if(!b)
{
x=1;
y=0;
return;
}
ll x0,y0;
Euclid(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
}
ll IM(ll X)
{
X%=Mod;
ll x,y;
Euclid(X,Mod,x,y);
if( x < 0 ) x+=Mod;
return x;
}
ll Exp(ll a,ll b)
{
ll ans=1;
int lg=log2(b)+1;
for(int i=lg;i>=0;i--)
{
ans=ans*ans;
if( ( b & ( 1 << i ) ) > 0 ) ans*=a;
}
return ans;
}
void Eratostenes()
{
for(int i=2;i*i<=Dim-9;i++)
if(!prim[i])
{
for(int j=i+i;j<=Dim-9;j+=i) prim[j]=1;
}
for(int i=2;i<=Dim-9;i++)
if(prim[i]==0) A[++lop]=i;
}
int main()
{
f>>T;
Eratostenes();
for(int t=1;t<=T;t++)
{
f>>y; lop=y;
ll ans1=1,ans2=1,alpha,p;
for(int i=1;A[i]*A[i]<=y;i++)
if( y % A[i] == 0 )
{
alpha=0;p=A[i];
while( y % A[i] == 0 )
{
y/=A[i];
alpha++;
}
ll ras=Exp(p,alpha+1);
ans1=ans1*(alpha+1);
ans2=( ( ( ( ras - 1 )%Mod ) * IM(p-1) ) % Mod * ans2 ) % Mod;
}
if( y > 1 )
{
ans1=ans1*(1+1);
ll ras=Exp(y,2);
ans2=( ( ( ( ras - 1 )%Mod ) * IM(y-1) ) * ans2 ) %Mod;
}
g<<ans1<<' '<<ans2<<'\n';
}
return 0;
}