Pagini recente » Cod sursa (job #1546301) | Cod sursa (job #2324071) | Cod sursa (job #750998) | Cod sursa (job #2287695) | Cod sursa (job #1318347)
#include<fstream>
#include<vector>
#define mod 9973
using namespace std;
typedef int var;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
vector<var> PRIME;
bool prim[1000010];
vector<var> P, E;
var nrdiv, sdiv;
var exp(var b, var e) {
var prod = 1;
while(e) {
if(e%2) {
prod = (prod*b)%mod;
e--;
} else {
b = (b * b)%mod;
e /= 2;
}
}
return prod;
}
var inv (const var &x) {
return exp(x, mod-2);
}
void genprim(var t) {
var i;
prim[1] = true;
for(i=2; i*i<=t; i++) {
if(!prim[i]) {
PRIME.push_back(i);
for(var j=i*2; j<=t; j+=i) {
prim[j] = true;
}
}
}
for(; i<=t; i++) {
if(!prim[i])
PRIME.push_back(i);
}
}
void descompune(var t) {
nrdiv = sdiv = 1;
P.clear();
E.clear();
for(var i=0; PRIME[i] * PRIME[i] <=t; i++) {
if(t%PRIME[i] == 0) {
P.push_back(PRIME[i]);
E.push_back(0);
while(t%PRIME[i] == 0) {
E[E.size() - 1] ++;
t /= PRIME[i];
}
var e = E[E.size() - 1];
nrdiv *= (e + 1);
sdiv = ((sdiv * ((exp(PRIME[i], e+1) + mod - 1)%mod))%mod * inv((PRIME[i] - 1 + mod)%mod))%mod;
}
}
if(!prim[t]) {
nrdiv *= 2;
sdiv = ((sdiv * ((t*t - 1 + mod)%mod))%mod * inv((t+mod-1)%mod))%mod;
}
}
int main() {
var t, x;
fin>>t;
genprim(1000010);
while(t--) {
fin>>x;
descompune(x);
fout<<nrdiv<<" "<<sdiv<<'\n';
}
return 0;
}