Pagini recente » Cod sursa (job #1416483) | Cod sursa (job #1604213) | Cod sursa (job #673081) | Cod sursa (job #535214) | Cod sursa (job #921782)
Cod sursa(job #921782)
// Include
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
// Definitii
#define pb push_back
#define ll long long
// Constante
const int mod = 9973;
// Functii
void erath();
ll POW(int nr, int power);
// Variabile
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int tests;
vector<int> primes;
// Main
int main()
{
erath();
in >> tests;
vector<int>::iterator primeIT, primeBEGIN=primes.begin(), primeEND = primes.end();
while(tests--)
{
ll num;
in >> num;
int divNum=1;
ll divSum=1;
for(primeIT=primeBEGIN ; 1LL*(*primeIT)*(*primeIT)<=num ; ++primeIT)
{
int divPower = 0;
while(!(num % *primeIT))
{
++divPower;
num /= *primeIT;
}
if(divPower)
{
divNum *= divPower+1;
divSum *= (POW(*primeIT, divPower+1) - 1) / (*primeIT - 1);
}
}
if(num != 1)
{
divNum *= 2;
divSum *= (POW(num, 2) - 1) / (num - 1);
}
out << divNum << ' ' << divSum%mod << '\n';
}
in.close();
out.close();
return 0;
}
void erath()
{
primes.reserve(78495);
primes.pb(2);
bitset<(int)1e6+2> isPrime;
isPrime.flip();
int limit = (int)1e6;
for(int i=3 ; i<limit ; i+=2)
{
if(isPrime[i])
{
for(int j=i*i ; j<limit && j>0 ; j+=i)
isPrime[j] = false;
primes.pb(i);
}
}
primes.pb(0);
}
ll POW(int nr, int power)
{
ll answer = 1, num = nr;
for(int i=0 ; (1<<i)<=power ; ++i)
{
if((1<<i)&power)
answer *= num;
num *= num;
}
return answer;
}