Pagini recente » Cod sursa (job #1497240) | Cod sursa (job #2227279) | Cod sursa (job #1484627) | Cod sursa (job #2834947) | Cod sursa (job #1039433)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <math.h>
#define MAX_PRIME 1000001
#define MOD 9973
using namespace std;
vector<int> primes;
short primCandidates[MAX_PRIME];
void generatePrimeNumbers(){
for (int i=2; i<=MAX_PRIME; i++){
if (primCandidates[i] == 0){
primes.push_back(i);
int j = 2*i;
while (j <= MAX_PRIME){
primCandidates[j] = 1;
j += i;
}
}
}
}
void handleNumber(long long n){
long long sum = 1;
long long divisorNumber = 1;
int i = 0;
while (primes[i] <= (int)sqrt(n)){
if (n % primes[i] == 0){
int d = 0;
long long partialPower = 1;
long long localPowerTerm;
while (n % primes[i] == 0){
n = n/primes[i];
d++;
partialPower = partialPower * primes[i];
}
//we need ( p^(d+1))
partialPower = partialPower * primes[i];
divisorNumber *= (d+1);
localPowerTerm = (partialPower -1)/(primes[i]-1);
localPowerTerm = localPowerTerm % MOD;
sum = (sum*localPowerTerm) % MOD;
}
i++;
}
if (n != 1){
divisorNumber *= 2;
sum = (sum * ((n*n -1) / (n-1))) % MOD;
}
sum = sum % MOD;
printf("%lld %lld\n", divisorNumber, sum);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
generatePrimeNumbers();
int t;
scanf("%d", &t);
long long n;
for (int i=0; i<t; i++){
scanf("%lld", &n);
handleNumber(n);
}
return 0;
}