Pagini recente » Cod sursa (job #1692530) | Cod sursa (job #351861) | Cod sursa (job #2623105) | Cod sursa (job #2112586) | Cod sursa (job #2601260)
#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;
card = 1;
sum = 1;
d = primNumbers[i];
while(x != 1)
{
exp = 0;
while(x % d == 0)
{
exp++;
x/=d;
}
if(exp > 0){
card *= (exp + 1);
card %= MOD;
sum*=(pow(d,exp + 1) - 1)/(d - 1);
sum %= 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';
}
}