Pagini recente » Cod sursa (job #474315) | Cod sursa (job #2084202) | Cod sursa (job #772801) | Cod sursa (job #1780034) | Cod sursa (job #2946837)
#include <bits/stdc++.h>
using namespace std;
const int RAD = 1e6;
const int MOD = 9973;
vector <int> prime, inv(MOD);
int putere(int a, int n)
{
int p=1;
while(n!=0)
{
if(n%2==1)
{
p=p*a%MOD;
}
a=a*a%MOD;
n=n/2;
}
return p;
}
int invers(int a)
{
return putere(a, MOD-2);
}
void prec()
{
bitset <1+RAD> c;
for(int i=2;i*i<=RAD;i++)
{
if(!c[i])
{
for(int mult=i*i;mult<=RAD;mult=mult+i)
{
c[mult]=1;
}
}
}
for(int i=2;i*i<=RAD;i++)
{
if(!c[i])
{
prime.push_back(i);
}
}
for(int i=1;i<MOD;i++)
{
inv[i]=invers(i);
}
}
void ssnd(long long n,long long &nrd, int &sd)
{
nrd=1;
sd=1;
int i=0;
while(i<(int)prime.size() && (long long)prime[i]*prime[i]<=n)
{
if(n%prime[i]==0)
{
long long p=1;
int e=0;
while(n%prime[i]==0)
{
e++;
p=p*prime[i]%MOD;
n=n/prime[i];
}
p=p*prime[i]%MOD;
nrd=nrd*(e+1);
sd=sd*(p+MOD-1)%MOD*inv[(prime[i]+MOD-1)%MOD]%MOD;
}
i++;
}
if(n!=1)
{
nrd=nrd*2;
sd=sd*((n+1)%MOD)%MOD;
}
}
int main()
{
prec();
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int t,i;
f>>t;
for(i=0;i<t;i++)
{
long long n;
f>>n;
long long nrd;
int sd;
ssnd(n,nrd,sd);
g<<nrd<<" "<<sd<<endl;
}
return 0;
}