Pagini recente » Cod sursa (job #1291691) | Cod sursa (job #3131570) | Cod sursa (job #899087) | Cod sursa (job #1279205) | Cod sursa (job #2474083)
#include <iostream>
#include <fstream>
#define Nmax 100000
#define mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int c[Nmax+5],pr[Nmax+5],k=0;
void ciurEratostene()
{
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;
}
}
}
int ridicarePutere(int b,int e)
{
int rez=1;
while(e)
{
if(e%2==1)
{
e--;
rez=(rez*b)%mod;
}
else
{
e/=2;
b=(b*b)%mod;
}
}
return rez;
}
//sd si nd sunt suma si numarul de divizori
void descompunereSumaNumar(int x,int &sd,int &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);
sd=((ridicarePutere(pr[i],p+1)-1)/(pr[i]-1))*(ridicarePutere(pr[i]-1,mod-2))%mod;
}
}
}
if(x!=1)
{
nd*=2;
sd*=(x+1);
}
}
int main()
{
int n,t;
ciurEratostene();
fin>>t;
for(int i=0; i<t; i++)
{
fin>>n;
int nd=1,sd=1;
descompunereSumaNumar(n,sd,nd);
fout<<nd<<" "<<sd<<"\n";
}
return 0;
}