Pagini recente » Cod sursa (job #1620234) | Cod sursa (job #932008) | Cod sursa (job #612245) | Cod sursa (job #163495) | Cod sursa (job #2565925)
#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];
vector < pair< ll , ll > > Div[1001];
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;
for(int i=1;i<=y;i++)
if( y % A[i] == 0 )
{
ll cnt=0;
while( y % A[i] == 0 )
{
y/=A[i];
cnt++;
}
Div[t].push_back({A[i],cnt});
}
ll ans1=1,ans2=1;
for(int i=0;i<Div[t].size();i++)
{
ll p=Div[t][i].first,alpha=Div[t][i].second;
ll ras=Exp(p,alpha+1);
ans1=ans1*(alpha+1);
ans2=( ( ( ( ras - 1 )%Mod ) * IM(p-1) ) % Mod * ans2 ) % Mod;
}
g<<ans1<<' '<<ans2<<'\n';
}
return 0;
}