Pagini recente » Cod sursa (job #1491042) | Cod sursa (job #405001) | Cod sursa (job #1368633) | Cod sursa (job #1688231) | Cod sursa (job #2047722)
#include <iostream>
#include <math.h>
#include <vector>
#include <fstream>
#define maxn 1000000
#define mod 9973
using namespace std;
unsigned long long t, n, divisor, l, prod;
unsigned long long prim[maxn], p[maxn], factor[maxn];
vector < int > v;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int Div(int fact, int power){
unsigned long long s = 1, a, sol;
for(int i = 1; i <= power; ++i){
a = fact, sol = 1;
for(int j = 0; (1LL<<j) <= i; ++j){
if((1LL<<j) & i) sol = ((sol % mod) * (a % mod)) % mod;
a = ((a % mod) * (a % mod)) % mod;
}
s = ((s % mod) + (sol % mod)) % mod;
}
return s;
}
int main(){
prim[1] = 1;
for(int i = 2; i < maxn; ++i){
if(!prim[i]){
for(int j = 2*i; j < maxn; j += i) prim[j] = 1;
}
}
for(int i = 2; i < maxn; ++i){
if(!prim[i]) v.push_back(i);
}
f >> t;
while(t > 0){
--t; divisor = 1, l = 0, prod = 1;
f >> n;
if(n % 2 == 0){
factor[++l] = 2;
while(n % 2 == 0){
++p[l];
n /= 2;
}
}
for(int i = 1; v[i] <= sqrt(n); ++i){
if(n % v[i] == 0){
factor[++l] = v[i];
while(n % v[i] == 0){
++p[l];
n /= v[i];
}
}
}
if(n > 1){
factor[++l] = n;
++p[l];
}
for(int i = 1; i <= l; ++i)
divisor *= (p[i] + 1);
for(int i = 1; i <= l; ++i){
prod = ((prod % mod) * (Div(factor[i], p[i]) % mod)) % mod;
p[i] = 0;
}
g << divisor << ' ' << prod << '\n';
}
}