Pagini recente » Cod sursa (job #636960) | Cod sursa (job #2399310) | Cod sursa (job #2564535) | Cod sursa (job #2534783) | Cod sursa (job #2379191)
#include <bits/stdc++.h>
using namespace std;
#define M 1000000
#define MOD 9973
int prime[400000], k;
bitset <M>ciuruit;
long long putere(long long x, long long n){
long long y = 1;
if(n==0) return 1;
else if(n==1) return x;
else{
while(n>1){
if(n%2==0){
x = (x*x);
n/=2;
}
else{
y = (x*y);
x = (x*x);
n = (n-1)/2;
}
}
return (x*y);
}
}
void ciur(){
for(int i = 2; i<=1000; i++){
if(!ciuruit[i]){
for(int j = 2; j<=M/i; j++) ciuruit[i*j] = 1;
}
}
prime[k++] = 2;
for(int i = 3; i<=M; i+=2) if(!ciuruit[i]) prime[k++] = i;
}
int getsumanddivs(long long x, int &sum){
sum = 1;
int p = 1, d = 0, e = 0;
int f = prime[d++];
while(x%f==0){
e++;
x/=f;
}
if(e){
p*=(e+1);
sum*=(putere(f, e+1)-1)/(f-1) % MOD;
}
f = prime[d++];
while(f*f<=x){
e = 0;
while(x%f==0){
e++;
x/=f;
}
if(e){
p*=(e+1);
sum*=(putere(f, e+1)-1)/(f-1)%MOD;
}
f = prime[d++];
}
if(x>1){
p*=2;
sum*=((putere(x, 2)-1)/(x-1))%MOD;
}
return p;
}
int main(){
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
ciur();
int n;
int x, sum;
scanf("%d", &n);
for(int i = 1; i<=n; i++){
scanf("%d", &x);
int h = getsumanddivs(x, sum);
printf("%d %d\n", h, sum);
}
}