Pagini recente » Istoria paginii utilizator/carausumadalina | Monitorul de evaluare | Cod sursa (job #2783165) | Cod sursa (job #1205964) | Cod sursa (job #2476247)
#include <iostream>
#include <fstream>
#define mod 9973
#define Nmax 1000005 /// aici lipsea o cifra
using namespace std ;
int put(int b,int e)
{
int rez=1;
b%=mod; /// daca e prea mare nr initial, ridicat la patrat iese din int
while(e)
{
if(e%2==1)
{
e--;
rez=(rez*b)%mod;
}
else
{
e/=2;
b=(b*b)%mod;
}
}
return rez;
}
int c[Nmax+5],pr[Nmax+5],k=0;
void ciur()
{
for(int i=2; i<=Nmax; i++)
{
if(c[i]==0)
{
pr[k++]=i;
for(int j=i+i; j<=Nmax; j+=i)
c[j]=1;
}
}
}
void desc(int x,long long &sd,long long &nd)
{
int p=0;
for(int i=0; i<k && pr[i]*pr[i]<=x; i++)
{
if(x%pr[i]==0)
{
p=0;
while(x%pr[i]==0)
{
x/=pr[i];
p++;
}
if(p!=0)
{
nd*=(p+1);
int ceva=(put(pr[i],p+1)-1)%mod;
int altceva=put(pr[i]-1,mod-2)%mod;
sd=(((sd*ceva)%mod)*altceva)%mod;
}
}
}
if(x!=1)
{
nd*=2;
sd=(sd*(x+1))%mod;
}
}
int main()
{
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int n,t;
ciur();
fin>>t;
for(int i=0; i<t; i++)
{
fin>>n;
long long sd=1;
long long nd=1;
desc(n,sd,nd);
fout<<nd<<" "<<sd<<"\n";
}
return 0;
}