Pagini recente » Cod sursa (job #1526638) | Cod sursa (job #861936) | Cod sursa (job #1283821) | Cod sursa (job #370904) | Cod sursa (job #473092)
Cod sursa(job #473092)
//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 <cstdio>
#define X 81430
#define N 1000001
#define mod 9973
int prim[X],vf=-1;
bool sieve[N];
void calc_sieve()
{int i,j;
prim[++vf]=2;
for (i=3;i*i<N;i+=2)
{if(sieve[i]==0)
{prim[++vf]=i;
for (j=i*i;j<N;j+=i)
{sieve[j]=1;
}
}
}
for (;i<N;i+=2)
{if(sieve[i]==0)
{prim[++vf]=i;
}
}
}
/*
long long pow(long long x,int pow)
{long long int p=1,pr=x;
while(pow)
{if(pow&1)
{p*=pr;
}
pow/=2;
pr=pr*pr;
}
return p;
} */
long long pow(long long x,int pow)
{long long pr=1;
for (int i=1;i<=pow;i++)
{pr*=x;
}
return pr;
}
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%(p=prim[j])==0)
{cnt=1;
a/=p;
while(a%p==0)
{a/=p;
cnt++;
}
no*=(cnt+1);
if(cnt>1)
sum=(sum*(pow(p,cnt+1)-1)/(p-1))%mod;
else
sum=(sum*(p+1))%mod;
}
}
printf("%lld %lld\n",no,sum);
}
return 0;
}