Pagini recente » Cod sursa (job #422672) | Sandwich | Cod sursa (job #1098527) | sandwich | Cod sursa (job #2078633)
#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, 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;
}
}
}
/* 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, firstItem = 1, imparte = 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]; // 2 + 4 + 8 eg n = 8
}
if(exponent != 0){
divizori *= (exponent + 1);
}
sum *= partialSum;
partialSum = 1;
exponent = 0;
}
cout << divizori << " " << sum << "\n";
}
int main() {
cin >> total;
while(total--){
cin >> n;
ciur(n);
sumaDivizori(n);
}
return 0;
}