Pagini recente » Cod sursa (job #487181) | Cod sursa (job #2155382) | Cod sursa (job #2240624) | Cod sursa (job #1541302) | Cod sursa (job #1753976)
#include <bits/stdc++.h>
#define P 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset<1000005>a;
int p[80000],k;
void Ciur(int n)
{
int i,j;
for(i=4;i<=n;i=i+2)
a[i]=1;
for(i=3;i*i<=n;i=i+2)
if(a[i]==0)
for(j=i*i;j<=n;j=j+2*i) a[j]=1;
for(i=2;i<=n;i++)
if(a[i]==0)
p[++k]=i;
}
int RidPutere(int a,int x)
{
int prod=1;
while(x!=0)
{
if(x%2==1)
{
x--;
prod=(1LL*a*prod)%P;
}
a=(1LL*a*a)%P;
x=x/2;
}
return prod;
}
int main()
{
Ciur(1000000);
int t;
long long n, sum=1, y;
int d,i,f[40],nrf,e,nrd,expo[40];
fin>>t;
for(int ii=1;ii<=t;ii++)
{
fin>>n;
d=2;i=1;
nrd = 1;
nrf = 0;
while(n>1&&d*d<=n&&i<=k)
{
if(n%d==0)
{
f[++nrf]=d;
e=0;
while(n%d==0)
{
e++;
n=n/d;
}
nrd=nrd*(e+1);
expo[nrf]=(e+1);
}
d=p[++i];
}
if(n>1)
{
f[++nrf]=n;
nrd=nrd*2;
expo[nrf]=2;
}
sum = 1;int fa;
for(i = 1; i <= nrf; i++)
{
fa = f[i];
e = expo[i];
y =RidPutere(fa, e)%P;
y--;
if(y==-1)
y=9972;
sum =(1LL*sum*y)%P;
sum =(1LL*sum*(RidPutere(fa-1, P-2)%P))%P;
}
fout << nrd << " "<< sum << "\n";
}
return 0;
}