Pagini recente » Cod sursa (job #1550244) | Cod sursa (job #1247720) | Cod sursa (job #2473320) | Cod sursa (job #2377828) | Cod sursa (job #939983)
Cod sursa(job #939983)
#include<fstream>
using namespace std;
#define mod 9973
#define max_n 1000010
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int T , n , k;
int Prim[100010] , D[1000] , Nr[1000];
bool Viz[max_n];
int power(int a , int b);
int inv_mod(int a);
void ciur(){
Prim[++k] = 2;
int i , j;
const int max_v = 1100;
for( i = 3 ; i <= max_v ; i += 2 ){
if(Viz[i] == 0)
for(j = 2*i ; j < max_n ; j += i)
Viz[j] = 1;
}
for(i = 3 ; i <= max_n ; i += 2)
if(Viz[i] == 0)
Prim[++k] = i;
}
void descompunere(int n , int D[] , int Nr[]){
int i , nr; D[0] = 0;
for( i = 1 ; i <= k && Prim[i] * Prim[i] <= n ; i++ ){
if( n % Prim[i] == 0 ){
nr = 0;
while(n % Prim[i] == 0){
n /= Prim[i];
nr++;
}
D[++D[0]] = Prim[i];
Nr[D[0]] = nr;
}
}
if(n != 1){
D[++D[0]] = n;
Nr[D[0]] = 1;
}
}
int numar(int D[] , int Nr[]){
int total = 1;
for(register int i = 1 ; i <= D[0] ; i++)
total *= (Nr[i] + 1);
return total;
}
int suma(int D[] , int Nr[]){
long long total = 1;
for(register int i = 1 ; i <= D[0] ; i++){
total *= ( ( ( power(D[i] , Nr[i] + 1) - 1 )*inv_mod(D[i] - 1) ) % mod ) ;
total %= mod;
}
return total;
}
int inv_mod(int a){
return power(a , mod - 2);
}
int power(int a , int b){
if(b == 0){
return 1;
}
else{
int p = power(a , b / 2);
if(b % 2 == 1)
return ((((p*p)%mod)*a)%mod);
else
return ((p*p)%mod);
}
}
int main(){
ciur();
f>>T;
while(T--){
f>>n;
descompunere(n , D , Nr);
g<<numar(D , Nr);
g<<" "<<suma(D , Nr)<<"\n";
}
return 0;
}