Pagini recente » Cod sursa (job #1478989) | Cod sursa (job #2763693) | Cod sursa (job #619382) | Cod sursa (job #1203286) | Cod sursa (job #863719)
Cod sursa(job #863719)
#include <iostream>
#include <bitset>
#include <fstream>
using namespace std;
#define Nmax 1000001
#define modulo 9973
bitset <Nmax> ciur;
short int div[80000];
int l = 0;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
void gen(){
for(int i = 2; i <= Nmax; i++)
if(!ciur[i]){
div[++l] = i;
for(int j = i + i; j <= Nmax; j += i)
ciur[j] = 1;
}
}
inline int putere(int a, int b){
int raspuns = 1;
a %= modulo;
for(b; b; b >>= 1){
if(b & 1)
raspuns *= a,
raspuns %= modulo;
a *= a;
a %= modulo;
}
return raspuns;
}
void descomp(int a){
int nr = 1, ns = 1;
for(int i = 1; i <= l && div[i] * div[i] <= a; ++i){
if(a % div[i])
continue;
int contor = 0;
while(a % div[i] == 0)
a /= div[i],
contor++;
nr *= (contor + 1);
int putere1 = (putere(div[i], contor + 1) - 1) % modulo;
int putere2 = putere(div[i] - 1, modulo - 2) % modulo;
ns = ((( ns * putere1) % modulo ) * putere2) % modulo;
}
if(a > 1)
nr *= 2,
ns = (ns * (a + 1) % modulo);
g << nr << " " << ns << "\n";
}
void rezolva(){
int n, a;
for(f >> n; n; n--){
f >> a;
descomp(a);
}
}
int main(){
gen();
rezolva();
return 0;
}