Pagini recente » Cod sursa (job #2533876) | Cod sursa (job #3239932) | Clasament teme_acmunibuc_2014_1_2 | Cod sursa (job #2695841) | Cod sursa (job #957385)
Cod sursa(job #957385)
#include<fstream>
#define NMAX 100007
#define MO 9973
#include<math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
struct factori{int factor;
int p;};
factori divi[256];
long prim[100000];
long long N;
int t=1,l=1,k;
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;
}
long suma()
{long 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()
{long 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++)//intram in lista de factori primi
{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++;}
}
if(i==k){divi[1].factor=N;divi[1].p=1; }
}
int main()
{int i;f>>t;
ciur();
for(i=1;i<=t;i++)
{f>>N;
incarcare();
g<<suma()<<" ";
g<<produs()<<"\n";
curatare();
}
return 0;
}