Pagini recente » Cod sursa (job #1429416) | Cod sursa (job #2432577) | Cod sursa (job #2760915) | Cod sursa (job #2392775) | Cod sursa (job #1861196)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in ("ssnd.in");
ofstream out ("ssnd.out");
bitset<200000> ciur;
int primes[200000], nprimes;
long long const mod = 9973;
long long nfactor = 0, factorp[1001];
long long factor[1001];
void calculciur() {
primes[0] = 2;
nprimes = 1;
for(int i = 3; i <= 200000; i += 2) {
if(ciur[i] == 0) {
primes[nprimes] = i;
nprimes++;
if(1LL * i * i <= 200000) { //mare atentie la buffer overflow la ciur
int j = i * i;
while (j <= 200000) {
ciur[j] = 1;
j += 2*i; //%
}
}
}
}
}
void gcd(long long a ,long long b ,long long &x ,long long &y){
if(b == 0){
x = 1;
y = 0;
} else{
gcd(b ,a % b ,x ,y);
long long aux = x;
x = y;
y = aux - a / b * y;
}
}
long long power(int a ,int b){
if(b == 0)
return 1;
else if(b == 1)
return a;
else if((b & 1) == 0){
long long result = power(a, b >> 1);
return (result * result) % mod;
} else{
long long result = power(a, b >> 1);
return (((result * result) % mod) * a) % mod;
}
}
void descompunere(long long n) {
int i = 0;
while(i < nprimes && primes[i] * primes[i] <= n) {
if(n % primes[i] == 0){
factor[nfactor] = primes[i];
factorp[nfactor] = 0;
while(n % primes[i] == 0){
n /= primes[i];
factorp[nfactor]++;
}
nfactor++;
}
i++;
}
if(1 < n) {
factor[nfactor] = n;
factorp[nfactor] = 1;
nfactor++;
}
}
int main()
{
long long n ,a ,x = 0,y = 0,s ,nr = 0 ,j;
int i;
calculciur();
in>>n;
for(i = 0 ; i < n ;i++){
in>>a;
nfactor = 0;
descompunere(a);
s = 1;
nr = 1;
for(j = 0 ; j < nfactor ; j++){
nr *= (factorp[j] + 1);
if((factor[j] - 1) % mod == 0){
s = (s * (factorp[j] + 1)) % mod;
} else{
s = (s * (power(factor[j] % mod, factorp[j] + 1) + mod - 1)) % mod;
gcd(factor[j] - 1 ,mod ,x ,y);
if(x < 0){
x = mod + x % mod;
}
s = (s * x) % mod;
}
}
out<<nr<<" "<<s<<'\n';
}
return 0;
}