Pagini recente » Cod sursa (job #1828156) | Cod sursa (job #599662) | Cod sursa (job #1570524) | Cod sursa (job #1652693) | Cod sursa (job #2078674)
#include <fstream>
#include <math.h>
// suma si numarul divizorilor
std :: ifstream cin("ssnd.in");
std :: ofstream cout ("ssnd.out");
#define NMAX 100000
#define Modulo 9973
int64_t n, a, allNumbers[NMAX], primeNrs[NMAX], count = 1, sum, j, nrPrime, exponent, result, total;
char A[NMAX];
//cout.flush;
void ciur() {
for(int64_t i = 2; i <= sqrt(NMAX); i++) {
if(A[i] == 0){
for(int64_t j = i * i; j <= NMAX; j += i) {
A[j] = 1;
}
}
}
for(int64_t i = 2; i <= NMAX; i++) {
// Check if it was marked as prime number and if yes, store it in the array primeNrs.
if(A[i] == 0 && primeNrs[i] != NMAX){
primeNrs[++nrPrime] = i;
}
}
}
/* n = p1^a1 * p2*a2 * p3^a3 atunci
divizori = (a1 + 1) * (a2 + 1) * (a3 + 1);
*/
void sumaDivizori(int64_t n){
int64_t divizori = 1, sum = 1, otherItems, partialSum = 1;
for(int64_t i = 1; i <= nrPrime; i++) {
otherItems = primeNrs[i];
while(n % primeNrs[i] == 0){
n /= primeNrs[i];
exponent++;
partialSum += otherItems;
otherItems *= primeNrs[i] % Modulo; // 2 + 4 + 8 eg n = 8
}
if(exponent != 0){
divizori *= (exponent + 1);
}
sum *= partialSum % Modulo;
partialSum = 1;
exponent = 0;
}
cout << divizori << " " << sum % Modulo << "\n";
}
int main() {
ciur();
cin >> total;
while(total--){
cin >> n;
sumaDivizori(n);
}
return 0;
}