Pagini recente » Cod sursa (job #3199690) | Cod sursa (job #1501490) | Cod sursa (job #1661897) | Cod sursa (job #1498691) | Cod sursa (job #3166625)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=1e6+5;
int ciur[MAXN+5];
long long prime[MAXN], k=0;
void make_ciur()
{
ciur[0]=ciur[1]=1;
for(int i=1; i*i<=MAXN; i++)
if(ciur[i]==0)
{
prime[++k]=i;
for(int j=i*i; j<=MAXN; j+=i)
ciur[j]=1;
}
}
const int MOD=9973;
int putere(int baza, int exp)
{
int rez=1;
while(exp)
{
if(exp&1)
rez=rez*baza %MOD;
baza=baza*baza%MOD;
exp>>=1;
}
return rez;
}
int inversmodular(int x)
{
return putere(x, MOD-2)%MOD;
}
signed main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
make_ciur();
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
int x;
cin>>x;
int nrdiv=1;
int sumdiv=1;
for(int pos=1; pos<=k && x; pos++)
{
if(x%prime[pos]!=0)///nu se imparte
continue;
int cnt=0;
while(x%prime[pos]==0)
{
cnt++;
x/=prime[pos];
}
nrdiv*=(cnt+1);
nrdiv%=MOD;
int numarator=putere(prime[pos], cnt+1)-1;
int numitor=inversmodular((prime[pos]-1)%MOD);
sumdiv*=((numarator%MOD) * (numitor%MOD))%MOD;
}
if(x > 1) {
nrdiv *= 2;
sumdiv = (1LL*sumdiv*(x+1) % MOD);
}
cout<<nrdiv<<' '<<sumdiv<<'\n';
}
return 0;
}