Pagini recente » Istoria paginii utilizator/pongraczlajos | Diferente pentru implica-te/arhiva-educationala intre reviziile 84 si 223 | Cod sursa (job #519) | Cod sursa (job #1934911) | Cod sursa (job #3286297)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
vector<int>prime;
bitset<1000001> ciur;
int mod=9973;
void eratostene()
{
for(int i=2;i<=1e6;i++)
{
if(!ciur[i])
{
prime.push_back(i);
for(int j=i;1ll*i*j<=1e6;j++)
ciur[i*j]=1;
}
}
}
long long power(long long base,int power)
{
long long res=1;
while(power)
{
if(power%2)
{
res*=base;
res%=mod;
}
base*=base;
base%=mod;
power/=2;
}
return res;
}
long long inv(long long n)
{
return power(n,mod-2);
}
void solve()
{
long long n;
long long nr=1,suma=1;
fin>>n;
int pos=0;
while(pos<prime.size() && prime[pos]*prime[pos]<=n)
{
int exp=0;
while(n%prime[pos]==0)
{
n/=prime[pos];
exp++;
}
nr*=(exp+1);
if(exp!=0)
{
suma*=(power(prime[pos],exp+1)-1+mod)%mod*inv(prime[pos]-1)%mod;
suma%=mod;
}
pos++;
}
if(n!=1)
{
nr*=2;
suma*=(n+1);
suma%=mod;
}
fout<<nr<<' '<<suma<<'\n';
}
int main()
{
eratostene();
int tc;
fin>>tc;
while(tc--)
solve();
return 0;
}