Pagini recente » Cod sursa (job #1106480) | Cod sursa (job #3129707) | Cod sursa (job #2590837) | Cod sursa (job #2325181) | Cod sursa (job #1160240)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <bitset>
using namespace std;
int t, a, nq, nr[1000050], sum;
bool prim[1000050];
void ciur()
{
nr[nq++] = 2;
for(int d=3; d<=1000000; d+=2){
if(prim[d]==0)
nr[nq++] = d;
for(long long i=d; i<=1000000; i+=2*d)
prim[i] = 1;
}
}
int putere(int x, int y)
{
int n=x;
int rez=1;
for(int i=0; 1<<i<=y; i++){
if((1<<i) & y){
rez*=n;
}
n = n*n;
}
return rez;
}
void diviz(int a)
{
sum=1;
int nrd=1, d, e;
for(int i=0; nr[i]*nr[i]<=a; i++){
d = nr[i];
e = 0;
while(a%d==0){
a/=d;
e++;
}
if(e){
nrd *= (e+1);
sum*= ((putere(d, e+1)-1)/(d-1))%9973;
sum%=9973;
}
}
if(a!=1){
nrd *= 2;
sum*= ((a*a-1)/(a-1))%9973;
sum%=9973;
}
//cerr << suma << "\n";
printf("%d %d\n", nrd, sum);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
scanf("%d", &t);
ciur();
for(int i=0; i<t; i++){
scanf("%d ", &a);
diviz(a);
}
return 0;
}