Pagini recente » Cod sursa (job #1879453) | Cod sursa (job #1516717) | Cod sursa (job #2469987) | Cod sursa (job #2850264) | Cod sursa (job #2601265)
#include <fstream>
#include <vector>
#define limit 1000000
#define MOD 9973
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
int ciur[1000001];
vector<int>primNumbers;
void eratosthenes()
{
primNumbers.push_back(2);
for(int i=3;i<=limit;i+=2)
if(!ciur[i])
{
primNumbers.push_back(i);
for(int j = 2 * i;j<=limit;j+=i)
ciur[j] = 1;
}
}
long long pow(long long x,long long p)
{
if(p == 0)
return 1;
if(p == 1)
return x;
long long rez = pow(x, p/2) % MOD;
if(p % 2 == 0)
return (rez * rez) % MOD;
return ((rez * rez) % MOD * x) % MOD;
}
void descompunere(long long x,long long &card, long long &sum)
{
long long i = 0, exp, d, p1, p2;
card = 1;
sum = 1;
d = primNumbers[i];
while(x != 1)
{
exp = 0;
while(x % d == 0)
{
exp++;
x/=d;
}
if(exp > 0){
p1 = (pow(d, exp+1) - 1) % MOD;
p2 = pow(d - 1, MOD - 2) % MOD;
sum = (((sum * p1) % MOD) * p2) % MOD;
card *= (exp + 1);
card %= MOD;
}
i++;
d = primNumbers[i];
if(d * d > x)
d = x;
}
}
int main()
{
long long card,sum,t,n;
cin>>t;
eratosthenes();
for(long long i=1;i<=t;i++)
{
cin>>n;
descompunere(n, card, sum);
cout<<card<<" "<<sum<<'\n';
}
}