Pagini recente » Cod sursa (job #2666645) | Cod sursa (job #2180448) | Cod sursa (job #1076790) | Cod sursa (job #2302868) | Cod sursa (job #1981882)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int t;
long long n,s,card;
//bool ciur[1000001];
/*void Ciur()
{
ciur[0] = ciur[1] = true;
int k;
for(int i=2;i<=1000001;i++)
if (ciur[i] == false)
{
k = 2;
while (k*i <= 1000001)
{
ciur[k*i] = true;
k++;
}
}
}*/
unsigned lgput(unsigned int base, unsigned int exp)
{
unsigned int rez = 1;
while (exp)
{
if (exp % 2)
{
rez *= base;
exp--;
}
base *= base;
exp /= 2;
}
return rez;
}
void ssnd(long long n)
{
card=s=1;
unsigned int d=0,p;
while(n%2==0)
{
n/=2;
d++;
}
if(d)
{
card=d+1;
s=lgput(2,d+1)-1;
}
unsigned int r=sqrt(n);
for(p=3;p<=r;p+=2)
{
d=0;
while(n%p==0)
{
n/=p;
d++;
}
if(d)
{
card*=d+1;
s*=(lgput(p,d+1)-1)/(p-1);
r=sqrt(n);
}
}
if(n!=1)
{
card*=2;
s*=(lgput(n,2)-1)/(n-1);
}
g<<card<<" "<<s%9973<<"\n";
}
int main()
{
f >> t;
for (int i = 1;i <= t;i++)
{
f >> n;
ssnd(n);
}
return 0;
}