Pagini recente » Cod sursa (job #867494) | Cod sursa (job #1219690) | Cod sursa (job #342490) | Cod sursa (job #2190109) | Cod sursa (job #2431001)
#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)
{
long long 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); //4536
s%=mod;
}
else
if (div>1)
{
long long c;
p*=(div+1);
c=suma(divizor,div);
c%=mod;
s*=c;
s%=mod;
}
}
}
divi2++;
}
if (nr>1)
{
p*=2;
s*=(nr+1);
}
g<<p<<" "<<s%mod;;
g<<"\n";
}
return 0;
}