Pagini recente » Cod sursa (job #2157722) | Cod sursa (job #143636) | Cod sursa (job #886223) | Cod sursa (job #1375870) | Cod sursa (job #1418696)
//#include <iostream>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <bitset>
#include <limits>
#include <fstream>
#include <cstring>
#include <iomanip>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
#define nmax 1000010
#define mod 9973
#define mp make_pair
#define pb push_back
#define int64 long long
#define pii pair<int,int>
#define inf numeric_limits<int>::max()
#define forv(v,it) for (vector<int>::iterator it=v.begin();it!=v.end();it++)
int n,k,nrDiv,f1,f2,s;
int prim[50001];
bool ciur[nmax];
int putlg(int a,int b)
{
int i,sol;
sol=1;
for (i=0;(1<<i)<=b;i++)
{
if ((1<<i)&b) sol=(sol*a)%mod;
a=(a*a)%mod;
}
return sol;
}
int main()
{
int64 i,j,x;
prim[++prim[0]]=2;
for (i=4;i<=nmax-10;i+=2) ciur[i]=1;
for (i=3;i<=nmax-10;i+=2)
if (!ciur[i])
{
prim[++prim[0]]=i;
for (j=i*i;j<=nmax-10;j+=2*i) ciur[j]=1;
}
for (cin>>n;n;n--)
{
cin>>x;
s=nrDiv=1;
for (i=1;i<=prim[0] && x>1;i++)
if (x%prim[i]==0)
{
k=0;
while (x%prim[i]==0)
{
k++;
x/=prim[i];
}
if (k)
{
nrDiv*=k+1;
f1=putlg(prim[i],k+1);
f2=putlg(prim[i]-1,mod-2);
f1--;if (f1<0) f1+=mod;
s=(((s*f1)%mod)*f2)%mod;
}
}
if (x>1) cout<<2<<" "<<x+2<<'\n';
else cout<<nrDiv<<" "<<s<<'\n';
}
}