Pagini recente » Monitorul de evaluare | Cod sursa (job #1522252) | Cod sursa (job #1339066) | Cod sursa (job #870442) | Cod sursa (job #2078603)
#include <fstream>
#include <math.h>
// suma si numarul divizorilor
std :: ifstream cin("ssnd.in");
std :: ofstream cout ("ssnd.out");
#define NMAX 1000
#define Modulo 9973
int64_t n, a, allNumbers[NMAX], primeNrs[NMAX], count = 1, sum, j, nrPrime, exponent = 1, result, total;
char A[NMAX];
//cout.flush;
void ciur(int64_t n) {
for(int64_t i = 2; i <= sqrt(n); i++) {
if(A[i] == 0){
for(int64_t j = i * i; j <= n; j += i) {
A[j] = 1;
}
}
}
for(int64_t i = 2; i <= n; i++) {
// Check if it was marked as prime number and if yes, store it in the array primeNrs.
if(A[i] == 0 && primeNrs[i] != n){
primeNrs[++nrPrime] = i;
}
}
/*
for(int64_t i = 1; i <= nrPrime; i++){
cout << "check primeNrs[i] = " << primeNrs[i] << "\n";
cout.flush();
}*/
}
void sumaDivizori(int64_t n){
int64_t divizori = 0, sum = 1, firstItem = 1, imparte = 1, otherItems, partialSum = 1;
for(int64_t i = 1; i <= nrPrime; i++) {
otherItems = primeNrs[i];
//cout << "check primeNrs[i] = " << primeNrs[i] << "\n";
//cout.flush();
while(n % primeNrs[i] == 0){
n /= primeNrs[i];
exponent++;
//cout << "check n = " << n << "\n"; ///// AICI
//cout.flush();
//firstItem = primeNrs[i] + 1;
//imparte = primeNrs[i];
partialSum += otherItems;
otherItems *= primeNrs[i]; // 2 + 4 + 8 eg n = 8
cout << "exponent = " << exponent << "\n";
}
divizori = exponent;
sum *= partialSum;
partialSum = 1;
//sum = (firstItem + otherItems) * (imparte - 1) % Modulo;
}
//cout << "check divizori " << divizori << "\n" << "\n";
//cout.flush();
cout << divizori << " " << sum << "\n";
exponent = 1;
//cout << "check divizori " << divizori << "\n" << "\n";
//cout.flush();
}
int main() {
cin >> total;
while(total--){
cin >> n;
ciur(n);
sumaDivizori(n);
}
return 0;
}