Pagini recente » Cod sursa (job #2767988) | Cod sursa (job #2437836) | Cod sursa (job #1372275) | Cod sursa (job #1444143) | Cod sursa (job #2277146)
#include <cstdio>
#include <bits/stdc++.h>
#define big 1000005
#define MOD 9973
using namespace std;
int sir[1000005];
int prime[10000];
int lp=0;
int t;
int ldesc=-1;
long putere=0;
pair<long, long> inversmod(int a, int b)
{
if (b == 0)
return { 1, 0 };
pair <long,long>p = inversmod(b, a % b);
return { p.second, p.first - a / b * p.second };
}
void genciur()
{
for(int i=3; i<big; i+=2)
if(!sir[i])
{
prime[++lp]=i;
for(int j=2*i; j<=big; j+=i)
sir[j]=1;
}
prime[0]=2;
}
long logp(long p,long n)
{
long t=1;
while(p>1)
{
if(p%2==1)
{
t=(t % MOD)*(n % MOD);
p--;
}
n=(n*n)%MOD;
p/=2;
}
return (n*t)%MOD;
}
void nrsisum(int putere,long numar)
{
int nrdiv=1;
for(int i=0; i<=ldesc; i++)
nrdiv*=putere+1;
printf("%ld ",nrdiv);
}
void calcul()
{
int nrdiv=1;
int sumadiv=1;
char c[13];
long n=0;
ldesc=-1;
scanf("%s\n",&c);
int l=strlen(c);
for(int i=0; i<l; i++)
{
n=n*10+(c[i]-'0');
}
for(int i=0; i<lp && n!=1; i++)
if(i*i>n)
{
putere=1;
nrdiv*=putere+1;
if((prime[i]-1)!=0)
{
long p=logp(putere+1,n)-1;
if(p<0)
p+=MOD;
sumadiv*=p;
sumadiv=sumadiv % MOD;
long a=inversmod((n-1),MOD).first;
while(a<0)
a+=MOD;
sumadiv*=a%MOD;
sumadiv=sumadiv % MOD;
}
else
sumadiv*=putere+1;
break;
}
else if(n%prime[i]==0)
{
putere=0;
while(n%prime[i]==0)
{
n/=prime[i];
putere++;
}
nrdiv*=putere+1;
if((prime[i]-1)!=0)
{
long p=logp(putere+1,prime[i])-1;
if(p<0)
p+=MOD;
sumadiv*=p;
sumadiv=sumadiv % MOD;
long a=inversmod((prime[i]-1),MOD).first;
while(a<0)
a+=MOD;
sumadiv*=a%MOD;
sumadiv=sumadiv % MOD;
}
else
sumadiv*=putere+1;
}
printf("%d %d\n",nrdiv,sumadiv);
}
/*int nrdiv=1;
for(int i=0;i<=ldesc;i++)
nrdiv*=desc[i].putere+1;
printf("%ld ",nrdiv);
long sumadiv=1;
for(int i=0;i<=ldesc;i++)
{
if((desc[i].factor-1)!=0)
{
long p=logp(desc[i].putere+1,desc[i].factor)-1;
if(p<0)
p+=MOD;
sumadiv*=p;
sumadiv=sumadiv % MOD;
long a=inversmod((desc[i].factor-1),MOD).first;
while(a<0)
a+=MOD;
sumadiv*=a%MOD;
sumadiv=sumadiv % MOD;
}
else
sumadiv*=desc[i].putere+1;
}
printf("%ld\n",sumadiv);
*/
void prelucrare()
{
scanf("%d\n",&t);
for(int i=0; i<t; i++)
{
calcul();
}
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
genciur();
prelucrare();
return 0;
}