Pagini recente » Istoria paginii utilizator/alexandrapopoiu | Cod sursa (job #2015189) | Rating Tudor Marin Diu (Tudor_MD2011) | Istoria paginii runda/ada10/clasament | Cod sursa (job #883564)
Cod sursa(job #883564)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
const int MAX_N = 1000005;
const int MOD = 9973;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
struct pereche{
int div, nr;
pereche(){
nr = 0;
}
};
int t;
bool prim[MAX_N];
vector<long>vec;
vector<pereche> divizori;
//---==== PENTRU DETERMINAREA NUMERELOR PRIME ===----//
void ciur(){
prim[1] = true;
for(int i=2; i<=MAX_N; i++){
if(!prim[i]){
vec.push_back(i);
for(int j=i; j<=MAX_N; j+=i)
prim[j] = true;
}
}
}
inline int pow(int x, int p) {
int rez = 1;
x %= MOD;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
void solve(long n){
for(size_t i=0; i<vec.size(); i++){
if(n%vec[i] == 0){
pereche p; p.div = vec[i];
while(n%vec[i] == 0){
p.nr ++;
n/= vec[i];
}
divizori.push_back(p);
}
}
long nr_div = 1;
long suma_div = 1;
for(size_t i=0; i<divizori.size(); i++){
nr_div *= divizori[i].nr+1;
int x = pow(divizori[i].div, divizori[i].nr+1);
suma_div *= (x - 1)/(divizori[i].div -1);
}
fout << nr_div << " " <<(long)suma_div % MOD<< '\n';
divizori.clear();
}
int main(){
ciur();
fin >> t;
for(int i=1; i<=t; i++){
long n; fin >> n;
solve(n);
}
return 0;
}