Pagini recente » Cod sursa (job #1663423) | Cod sursa (job #1793682) | Cod sursa (job #429549) | Cod sursa (job #682071) | Cod sursa (job #2430988)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <math.h>
const int mod=9973;
using namespace std;
const int nMax= 500005;
bitset<nMax> prim;
int priml[100000];
void ciur ()
{
int i=1;
for (unsigned int d=3; d<=1e6; d+=2)
{
if (!prim[d/2])
{
priml[i]=d;
i++;
}
for (unsigned int j=3; d*j<=1e6; j+=2)
prim[d*j/2]=1;
}
}
int suma (int p, int d)
{
int s2=1;
while (d+1)
{
s2*=p;
d--;
}
s2--;
s2/=(p-1);
return s2;
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
unsigned int t;
f>>t;
ciur();
priml[0]=2;
for (unsigned int i=0; i<t; i++)
{
unsigned int div=0, p=1, divi2=0;
unsigned long long int s=1, nr;
f>>nr;
while ((nr!=1)&&(priml[divi2]<=sqrt(nr)))
{
if (nr<1e6 && nr%2==1)
if (!prim[nr/2])
break;
div=0;
int divizor=priml[divi2];
while (nr%divizor==0)
{
div++;
nr/=divizor;
if (nr%(divizor)!=0)
{
if (div==1)
{
p*=2;
s*=(divizor+1);
s%=mod;
}
else
if (div>1)
{
p*=(div+1);
s*=suma(divizor,div);
s%=mod;
}
}
}
divi2++;
}
if (nr>1)
{
p*=2;
s*=(nr+1);
}
g<<p<<" "<<s%mod;;
g<<"\n";
}
return 0;
}