Pagini recente » Monitorul de evaluare | Cod sursa (job #2045322) | Cod sursa (job #2162468) | Cod sursa (job #1336130) | Cod sursa (job #2498266)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int n, m, t, f[1000001], i, j, prime[100003], nrP;
void ridicare(int baza, int putere, int &rezultat){
if(putere == 0)
return;
int r1 = 1;
rezultat = 1;
ridicare(baza, putere/2, r1);
rezultat = (r1*r1)%9973;
if(putere % 2 == 1)
rezultat = rezultat*baza%9973;
}
int main(){
f[0] = f[1] = 1;
for(i=2;i<=1000000;i++)
if(f[i] == 0){
prime[++nrP] = i;
for(j=i+i;j<=1000000;j+=i)
f[j] = 1;
}
fin>>t;
while(t--){
fin>>n;
int m = n;
int nrdiv = 1, sum = 1;
for(i=1;prime[i]*prime[i]<=n && i<=nrP && m>1;i++){
if(m%prime[i] == 0){
int a = 0, b = 0, c = 0;
while(m%prime[i] == 0 && m>1){
a++;
m /= prime[i];
}
nrdiv = (((1+a)%9973)*nrdiv)%9973;
ridicare(prime[i], a+1, b);
ridicare(prime[i]-1, 9971, c);
sum = ((((b-1)%9973)*(c%9973)%9973)*sum)%9973;
}
}
if(m > 1){
int a = 1, b = 0, c = 0;;
nrdiv = (((1+a)%9973)*nrdiv)%9973;
ridicare(m, a+1, b);
ridicare(m-1, 9971, c);
sum = ((((b-1)%9973)*(c%9973)%9973)*sum)%9973;
}
fout<<nrdiv<<" "<<sum<<"\n";
}
return 0;
}