Pagini recente » Cod sursa (job #1749644) | Cod sursa (job #102214) | Cod sursa (job #1714945) | Cod sursa (job #2127461) | Cod sursa (job #1386145)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int64_t n, t, prim[78500],m=1, nr=1, sum=1;
bool a[1000001];
int64_t sqr(int64_t y){return y*y;}
void ciur()
{
for(int i=3;i*i<=1000000;i++)
for(int j=i*i;j<=1000000;j=j+2*i)
a[j]=true;
prim[1]=2;
for(int i=3;i<=1000000;i+=2)
if(!a[i]) m++,prim[m]=i;
}
int64_t lgput(int64_t x, int64_t a)
{
if(a==1) return x;
if(!(a%2)) return sqr(lgput(x,a/2));
else return x*lgput(x,a-1);
}
int main()
{
f>>t;
ciur();
for(int i=1;i<=t;i++)
{
f>>n; int64_t index; int64_t pt=0; nr=sum=1;
if(n<=1000001 && !a[n]) index=n;
else if ((int)sqrt(n)>78500) index=78498;
else index=(int)sqrt(n);
while (n!=1 && index>0)
{
while (!(n%prim[index]) && n!=1)
{
pt++; n/=prim[index];
}
if(pt) nr*=(pt+1), sum=(sum%9973*((lgput(prim[index],pt+1)-1)/(prim[index]-1))%9973)%9973;
pt=0; index--;
}
g<<nr<<' '<<sum<<'\n';
}
return 0;
}