Pagini recente » Cod sursa (job #1124289) | Cod sursa (job #1817658) | Cod sursa (job #2185476) | Cod sursa (job #2949135) | Cod sursa (job #755669)
Cod sursa(job #755669)
#include <fstream>
#include <math.h>
using namespace std;
typedef char TChar;
typedef TChar *PChar;
typedef long long TTime;
//#define DEBUGGING
#ifdef DEBUGGING
#include <windows.h>
#include <conio.h>
TTime CyclesPerSecond = 0;
void InitCycles(void)
{
LARGE_INTEGER LI;
QueryPerformanceFrequency(&LI);
CyclesPerSecond = LI.QuadPart;
}
TTime GetCycles(void)
{
LARGE_INTEGER LI;
QueryPerformanceCounter(&LI);
return LI.QuadPart;
}
void CyclesToTime(TTime Cycles,PChar Message)
{
printf("%s : %lld\n",Message,(Cycles * 1000000) / CyclesPerSecond);
}
#else
void InitCycles(void)
{
}
TTime GetCycles(void)
{
return 0;
}
void CyclesToTime(TTime,PChar)
{
}
#endif
char Er[1000005];
long Prime[100000];
long PrimCount;
void Erathostene(long N)
{
Prime[0] = 2;
PrimCount = 1;
long i,j;
for (i = 3;i <= N;i += 2)
{
if (Er[i] == 0)
{
Prime[PrimCount] = i;
PrimCount += 1;
for (j = (i << 1);j <= N;j += i)
{
Er[j] = 1;
}
}
}
}
long powint(long a,long n)
{
a %= 9973;
long r,p;
r = 1;
p = a;
while (n > 0)
{
if (n & 1)
{
r = (r * p) % 9973;
}
p = (p * p) % 9973;
n >>= 1;
}
return r;
}
long computesumelement(long prim,long exp)
{
long p1,p2;
p1 = powint(prim,exp + 1) - 1;
p2 = powint(prim - 1,9971);
return (p1 * p2) % 9973;
}
long long isqrt(long long N)
{
long long op = N;
long long res = 0;
long long one;
one = ((long long)(1)) << (((8 * 8) - 2));
while (one > op)
{
one >>= 2;
}
while (one != 0)
{
if (op >= (res + one))
{
op -= res + one;
res = (res >> 1) + one;
}
else
{
res >>= 1;
}
one >>= 2;
}
return res;
}
void Compute(long long n,long &r1,long &r2)
{
r1 = 1;
r2 = 1;
long primpos = 0;
long cnt;
while ((n > 1) && (Prime[primpos] * Prime[primpos] <= n))
{
if ((n % Prime[primpos]) == 0)
{
cnt = 0;
do
{
cnt += 1;
n /= Prime[primpos];
}
while ((n % Prime[primpos]) == 0);
r1 = r1 * (cnt + 1);
r2 = (r2 * computesumelement(Prime[primpos],cnt)) % 9973;
}
primpos += 1;
}
if (n > 1)
{
r1 <<= 1;
if (n == 9973)
{
return;
}
r2 = (r2 * computesumelement(n,1)) % 9973;
}
}
int main(void)
{
InitCycles();
TTime T1,T2;
T1 = GetCycles();
Erathostene(1000000);
T2 = GetCycles();
CyclesToTime(T2 - T1,"Erathostene");
long T,i,r1,r2;
long long n;
r1 = 0;
r2 = 0;
fstream fin("ssnd.in",ios::in);
fstream fout("ssnd.out",ios::out);
T1 = GetCycles();
fin >> T;
for (i = 0;i < T;i += 1)
{
fin >> n;
Compute(n,r1,r2);
fout << r1 << " " << r2 << "\n";
}
T2 = GetCycles();
CyclesToTime(T2 - T1,"SSND");
fin.close();
fout.close();
// _getch();
return 0;
}