Pagini recente » Cod sursa (job #2361415) | Cod sursa (job #1540692) | Cod sursa (job #3277918) | Cod sursa (job #1582228) | Cod sursa (job #957390)
Cod sursa(job #957390)
#include<fstream>
#define NMAX 100007
#define MO 9973
#include<math.h>
#include<iostream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
struct factori{int factor;
int p;};
factori divi[256];
long prim[100000];
int t,l=1,k=1;
long long N;
bool v[NMAX];
void ciur()
{
int i,j;
for(i=2;i<NMAX;i++)
if(v[i]==0)
{
prim[k]=i;k++;
for(j=i+i;j<NMAX;j=j+i)
v[j]=1;
}
}//ciuruim numerele pana la 10^6 si le tinem minte in prim
void curatare()
{
int i;
for(i=1;i<=l;i++)
{
divi[i].factor=0;
divi[i].p=0;
}
l=1;
}
int suma()
{
int i,s=1;
for(i=1;i<=l;i++)
s=s*(divi[i].p+1);
return s;
}
long long putere(long a,long b)
{
long long i,p=1;
for(i=1;i<=b;i++)
p=p*a;
return p;
}
int produs()
{
int i,p=1;
for(i=1;i<=l;i++)
p=1LL*p*( putere(divi[i].factor,divi[i].p+1)-1) / (divi[i].factor-1)%MO;
return p%MO;
}
void incarcare()
{int i;
for(i=1;i<k;i++)//daca e un factor prim
{
if(N%prim[i]==0)//daca e divizor
{
divi[l].factor=prim[i];//incarcam ca fiind factor
while(N%prim[i]==0)//calculam puterea
{
N/=prim[i];divi[l].p++;
}
l++;
}
}
}
int main()
{
int i;f>>t;
ciur();
for(i=1;i<=t;i++)
{
f>>N;
incarcare();
g<<suma()<<" ";
g<<produs()<<"\n";
curatare();
}
return 0;
}