Pagini recente » Cod sursa (job #2722491) | Cod sursa (job #1575743) | Cod sursa (job #1734874) | Cod sursa (job #727436) | Cod sursa (job #1490803)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <math.h>
#define max 1000003
#define MOD 9973
using namespace std;
int n;
bitset<max> prim;
vector<pair<int,int> > v;
int nr;
int lgput(int x,int n)
{
if(n==0)
return 1;
if(n%2==0)
return lgput((x*x)%MOD,n/2)%MOD;
return (lgput(x,n-1)%MOD*x)%MOD;
}
void descomp()
{
int nrdiv=nr;
int ndiv=0;
while(nr%2==0)
nr/=2,ndiv++;
if(ndiv)
v.push_back(make_pair(2,ndiv));
for(int i=2;i<=sqrt(nrdiv);i+=2)
prim[i]=1;
ndiv=0;
for(int i=3;i<=sqrt(nrdiv);i+=2,ndiv=0)
{
if(prim[i]==1)
continue;
while(nr%i==0)
nr/=i,ndiv++;
if(ndiv)
v.push_back(make_pair(i,ndiv));
for(int j=i;j<=sqrt(nr);j+=i)
prim[j]=1;
}
if(v.empty())
v.push_back(make_pair(nr,1));
}
int nr_div()
{
int nrdiv=v[0].second+1;
for(int i=1;i<v.size();i++)
{nrdiv*=v[i].second+1;
nrdiv%=MOD;}
return nrdiv;
}
int sum_div()
{
int sdiv=1;
for(int i=0;i<v.size();i++)
{sdiv*=lgput(v[i].first,v[i].second+1)-1;
sdiv%=MOD;
sdiv*=lgput(v[i].first-1,MOD-2);
sdiv%=MOD;
}
return sdiv;
}
void solve()
{
for(int i=1;i<=n;i++,v.clear(),prim=0)
{
scanf("%d ",&nr);
descomp();
printf("%d %d\n",nr_div(),sum_div());
}
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d ",&n);
solve();
return 0;
}