Pagini recente » Cod sursa (job #1774916) | Cod sursa (job #910755) | Cod sursa (job #2787249) | Cod sursa (job #1550011) | Cod sursa (job #797436)
Cod sursa(job #797436)
#include <stdio.h>
#include <bitset>
#define ll long long
#define NMAX 1000005
#define MOD 9973
using namespace std;
int t,A[NMAX],r,rez;
ll n,cnt_divs;
bitset <NMAX> marc;
void precompute()
{
int i,j;
for (i=2; i*i<NMAX; i++)
if (!marc[i])
for (j=i*i; j<NMAX; j+=i)
marc[j]=1;
for (i=2; i<NMAX; i++)
if (!marc[i])
A[++r]=i;
}
int lgput(int baza,int exp)
{
int act=1;
while (exp)
{
if (exp & 1)
act=(act*baza)%MOD;
baza=(baza*baza)%MOD;
exp>>=1;
}
return act;
}
void prel(ll val,int exp)
{
int act;
act=lgput(val%MOD,exp+1)-1;
if (act<0) act+=MOD;
act=(act*lgput(val-1,MOD-2))%MOD;
rez=(rez*act)%MOD;
}
void desc()
{
int i,exp;
rez=1; cnt_divs=1;
for (i=1; (ll)A[i]*A[i]<=n; i++)
if (n % A[i]==0)
{
exp=0;
while (n % A[i]==0)
n/=A[i],exp++;
cnt_divs*=exp+1;
prel((ll)A[i],exp);
}
if (n!=1)
prel(n,1),cnt_divs*=2;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
precompute();
scanf("%d",&t);
while (t--)
{
scanf("%lld",&n);
desc();
printf("%lld %d\n",cnt_divs,rez);
}
return 0;
}