Pagini recente » Cod sursa (job #38041) | Cod sursa (job #2318920) | Cod sursa (job #1548346) | Cod sursa (job #1190075) | Cod sursa (job #2094311)
#include <iostream>
#include <fstream>
using namespace std;
typedef long long ll;
int p[1000001],a[1000001],b[1000001],s,ss;
ll exp(int n,int m)
{
if(m==1) return n%9973;
if(m%2==0) return (exp(n,m/2)%9973)*(exp(n,m/2)%9973);
if(m%2==1) return ((exp(n,m/2)%9973)*(exp(n,m/2)%9973)*n)%9973;
}
void prim(ll n)
{
p[1]=1;
for(int i=4; i<=n; i+=2)
p[i]=1;
for(int i=3; i<=n; i+=2)
{
if(p[i]==0)
for(int j=2; j*i<=n; ++j)
p[i*j]=1;
}
}
void fact(ll n)
{
if(n%2==0) while(n%2==0) {n/=2; b[2]++;}
for(int i=3; i<=n; i+=2)
{
if(p[i]==0)
{
if(n%i==0)
{
while(n%i==0)
{
n=n/i;
b[i]++;
}
}
}
}
}
int main()
{
ll n,t;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
f>>t;
prim(1000000);
//fact(12);
// g<<nrdiv(12)<< " " <<sdiv(12);
//cout<< sdiv(12);
for(int i=1; i<=t;++i)
{
f>>n;
fact(n);
s=1;ss=1;
if(p[n]==0) s= 2;
else{
//cout<<b[2]<<endl;
if(b[2]>0) s=s*(b[2]+1);
for(int i=3; i*i<=n;i+=2)
{
if(b[i]>0) s*=(b[i]+1);
}
}
if(p[n]==0){ss=n+1; b[n]=0;}
else{
if(n%2==0) ss=ss*(exp(2,b[2]+1)-1)%9973; b[2]=0;
for(int i=3; i*i<=n; i+=2)
{
if(b[i]>0)
{
ss=(ss*((exp(i,b[i]+1)-1)%9973)/(i-1) )%9973;
b[i]=0;
}
}
}
g<<s<<" "<<ss<<'\n';
}
return 0;
}