Pagini recente » Cod sursa (job #1203117) | Cod sursa (job #3233590) | Cod sursa (job #372527) | Cod sursa (job #1541671) | Cod sursa (job #473086)
Cod sursa(job #473086)
//nr prime pana la un milion
//pentru fiecare numar nk
//generarea listei de nr prime la care se divide nk si de cate ori se divide la aceste numere prime
//afisarea numarului (1+n1)*(1+n2)*...*(1+nn)
//[p1^(n1+1)-1]/[p1-1]* [p2^(n2+1)-1]/[p2-1] modulo 9973
//#include <math.h>
#include <cstdio>
#define X 81430
#define N 1000001
#define mod 9973
int prim[X],vf=-1;
int sieve[N];
void calc_sieve()
{int i,j;
for (i=3;i*i<N;i++)
{if(sieve[i]==0)
{for (j=i*i;j<N;j+=i)
{sieve[j]=1;
}
}
}
prim[++vf]=2;
for (i=3;i<N;i+=2)
{if(sieve[i]==0)
{prim[++vf]=i;
}
}
}
long long pow(long long x,int pow)
{long long int p=1;
for (int i=1;i<=pow;i++)
{p*=x;
}
return p;
}
int main ()
{int i,t,j,cnt;
long long int a,p;
long long no,sum;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&t);
calc_sieve();
for (i=1;i<=t;i++)
{scanf("%lld",&a);
no=1;
sum=1;
for (j=0;j<vf&&a>1;j++)
{if(a%prim[j]==0)
{cnt=1;
a/=prim[j];
while(a%prim[j]==0)
{a/=prim[j];
cnt++;
}
no*=(cnt+1);
if(cnt>1)
sum=(sum*(pow(prim[j],cnt+1)-1)/(prim[j]-1))%mod;
else
sum=(sum*(prim[j]+1))%mod;
}
}
printf("%lld %lld\n",no,sum);
}
return 0;
}