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