Pagini recente » Cod sursa (job #2736182) | Cod sursa (job #2623353) | Cod sursa (job #2519666) | Cod sursa (job #637886) | Cod sursa (job #1478660)
#include <stdio.h>
#include <bitset>
#define mod 9973
#define nmax 1000010
using namespace std;
int n,i,j,prim[100500],nr,k,xx,y,z;
long long x,sumd,sol,nrdiv;
bitset <nmax> fr;
void gcd(int a,int b)
{
if (b==0) { xx=1; y=0; return; } else
{
gcd(b,a%b);
z=xx; xx=y;
y=z-(a/b)*xx;
}
}
int invers(int x)
{
xx=0; y=0; gcd(x,mod);
while (xx<0) xx=xx+mod;
return xx;
}
int main() {
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&n);
for (i=2;i*i<=nmax-10;i++)
if (fr[i]==0) {
for (j=i*i;j<=nmax-10;j+=2*i) fr[j]=1;
}
nr++; prim[nr]=2;
for (i=3;i<=nmax-10;i+=2)
if (fr[i]==0) nr++,prim[nr]=i;
for (i=1;i<=n;i++) {
scanf("%lld",&x); j=1; nrdiv=1; sol=1;
while (x>1 && j<=nr && 1LL*prim[j]*prim[j]<=x) {
k=0; sumd=1;
while (x%prim[j]==0) { k++; x=x/prim[j]; sumd=(sumd*1LL*prim[j])%mod; }
if (k>0) {
nrdiv=nrdiv*1LL*(k+1); sumd=(sumd*1LL*prim[j])%mod; sol=sol*((sumd-1)*invers(prim[j]-1))%mod; }
j++;
}
if (x>1) { nrdiv=nrdiv*2; sol=sol*(x*x-1)/(x-1)%mod; }
printf("%lld %lld\n",nrdiv,sol);
}
return 0;
}