Pagini recente » Cod sursa (job #1111117) | Cod sursa (job #2672745) | Cod sursa (job #2196547) | Cod sursa (job #1775427) | Cod sursa (job #734009)
Cod sursa(job #734009)
using namespace std;
#include<cstdio>
#include<bitset>
#define MAX 1000005
#define MAX2 78600
#define MOD 9973
bitset <MAX> ciur;
int prim[MAX2],k;
void ciur_er()
{
int i,j;
for(i=2;i<MAX-1;i++)
if(!ciur[i])
{
prim[++k]=i;
for(j=i+i;j<MAX-1;j+=i)
ciur[j]=1;
}
}
inline int pow(int x, int p)
{
int rez = 1;
x %= MOD;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int T,c,nrd,i,S,P;
long long n,m;
ciur_er();
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
nrd=1;
S=1;
for(i=1;(1LL*prim[i]*prim[i]<=n)&&(i<=k);i++)
{
m=n;
c=1;
while(n%prim[i]==0)
{
n=n/prim[i];
c++;
}
nrd*=c;
P=(((m/n)*(1LL*prim[i])-1)/(1LL*prim[i]-1))%MOD;
int p1 = (pow(prim[i], c) - 1) % MOD;
int p2 = pow(prim[i]-1, MOD-2) % MOD;
S = (((S * p1) % MOD) * p2) % MOD;
// S=((S*P)%MOD;
//S=S*P;
}
if(n!=1)
{
nrd*=2;
S=(1LL*S*(n+1))%MOD;
//S=S*(n+1);
}
printf("%d %d\n",nrd,S); // numar divizori, suma divizori
}
return 0;
}