Pagini recente » Cod sursa (job #2586637) | Cod sursa (job #3278672) | Cod sursa (job #2927578) | Cod sursa (job #710124) | Cod sursa (job #718122)
Cod sursa(job #718122)
#include<fstream>
#include<cmath>
#include<vector>
#define _CIUR 1000010
#define MOD 9973
typedef unsigned long long ull;
using namespace std;
vector<int> lPrime;
void ciuruieste()
{
static bool compus[_CIUR];
for (int i=3;i<_CIUR;i+=2)
if (!compus[i])
{
if (i<=sqrt(_CIUR)) for (int k=i*i;k<_CIUR;k+=i)
compus[k]=1;
lPrime.push_back(i);
}
}
ull mpow(int base, int exp)
{
if (exp==1) return base;
if (exp%2==0) return mpow(base,exp/2)*mpow(base,exp/2);
else return mpow(base,exp/2)*mpow(base,exp/2)*base;
}
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
void print_nr_sum(ull);
int main()
{
ciuruieste();
int nNr; fin>>nNr;
for (int i=1;i<=nNr;i++)
{
ull n; fin>>n;
print_nr_sum(n);
}
return 0;
}
void print_nr_sum(ull n)
{
ull nDiv, sum;
int exp=0;
for (;n%2==0;n/=2) exp++;
nDiv=(exp+1);
sum=mpow(2,exp+1)-1;
for (vector<int>::iterator pPr=lPrime.begin(); *pPr<=sqrt(n); ++pPr)
{
if (n%*pPr!=0) continue;
for (exp=0;n%*pPr==0;n/=*pPr) exp++;
nDiv*=(exp+1);
sum=(mpow(*pPr,exp+1)-1)/(*pPr-1)*sum %MOD;
}
if (n!=1)
{
nDiv*=2;
sum=(n+1)*sum %MOD;
}
fout<<nDiv<<" "<<sum<<"\n";
}