Pagini recente » Cod sursa (job #535390) | Cod sursa (job #1376125) | Cod sursa (job #2871734) | Cod sursa (job #911611) | Cod sursa (job #3321324)
#include <fstream>
#include <vector>
#include <cstdint>
#define int long long
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
bool ciur[1000001];
vector<int>prime;
const int MOD = 9973;
void gen_fact()
{
ciur[1] = 1;
for(int i=2;i<=1000000;i++)
{
if(ciur[i] == 0)
{for(int j=i*2;j<=1000000;j+=i)
ciur[j] = 1;
prime.push_back(i);
}
}
}
int fast_pow(int b,int p)
{
if(p==0)
return 1;
else if(p%2==0)
{
int rez=fast_pow(b,p/2)%MOD;
return (rez*rez)%MOD;
}
return (b*fast_pow(b,p-1))%MOD;
}
int32_t main()
{
int t;
cin>>t;
gen_fact();
while(t--)
{
int n;
cin>>n;
int p = 0;
int diviz = 1;
int sum = 1;
for(int h=0;h<prime.size() && prime[h] <= n;h++)
{
while(n % prime[h] == 0)
{
p++;
n/=prime[h];
}
if(p!=0)
{diviz*=(p+1);
int inv = ((fast_pow(prime[h],p+1) - 1 + MOD)%MOD * fast_pow(prime[h]-1,MOD-2))%MOD;
sum = sum * inv % MOD;
}
p=0;
}
if(n!=1)
{
diviz*=2;
int inv = ((fast_pow(n,2) - 1 + MOD)%MOD * fast_pow(n,MOD-2))%MOD;
sum = sum * inv % MOD;
}
cout<<diviz<<" "<<sum<<'\n';
}
return 0;
}