Pagini recente » Cod sursa (job #1244846) | Cod sursa (job #1679894) | Cod sursa (job #41006) | Cod sursa (job #209007) | Cod sursa (job #608957)
Cod sursa(job #608957)
#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;r%m;}
b=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&&1LL*pr[pri]*pr[pri]<=n;pri++){
if (n%pr[pri]) continue;
d1=0;
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;
}