Pagini recente » Cod sursa (job #1844674) | Cod sursa (job #2482794) | Cod sursa (job #1780582) | Cod sursa (job #1449009) | Cod sursa (job #609350)
Cod sursa(job #609350)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n,nmax=1000005;
bool ciur[1000005];
int pr[1000005],pri,ci,cj,k,t,ti,m=9973,i,d1,card,suma,t1,t2;
inline int pow (int b, int p) {
int r=1;
b%=m;
for (;p;p>>=1) {
if (p&1) r=r*b%m;
b=b*b%m;
}
return r;
}
int main() {
ciur[1]=true;pri=0;
for (ci=2;ci<nmax-1;ci++){
if(ciur[ci]==0) {
pr[++k]=ci;
for (cj=ci+ci;cj+1<nmax;cj+=ci)
ciur[cj]=1;
}
}
f >> t;
for (ti=1;ti<=t;ti++) {
f >> n;card=1;suma=1;
for (pri=1;pri<=k&&(long long)pr[pri]*pr[pri]<=n;pri++){
if (n%pr[pri]==0) {
d1=0;
while (n%(pr[pri]*pr[pri])==0) {d1+=2;n/=(pr[pri]*pr[pri]);}
while (n%pr[pri]==0) {d1++;n/=pr[pri];}
card*=(d1+1);
t1=(pow(pr[pri],d1+1)-1)%m;
t2=pow(pr[pri]-1,m-2)%m;
suma=(((suma*t1)%m)*t2)%m;
}
}
if (n>1) {
card*=2;
suma=(1LL*suma*(n+1)%m);
}
g << card << ' ' << suma << '\n';
}
f.close();g.close();
return 0;
}