69,368
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <Windows.h>
inline BOOLEAN IsEven(ULONG64 x)
{
if (x & 0x01ULL)
return FALSE;
else
return TRUE;
}
ULONG64 GCD(ULONG64 x, ULONG64 y)
{
if (x < y)
return GCD(y, x);
if (y == 0)
return x;
else
{
if (IsEven(x))
{
if (IsEven(y))
return GCD(x>>1, y>>1) << 1;
else
return GCD(x>>1, y);
}
else
{
if (IsEven(y))
return GCD(x, y>>1);
else
return GCD(y, x-y);
}
}
}
void TimeStart(LARGE_INTEGER *pBegintime)
{
QueryPerformanceCounter(pBegintime);
}
LPSTR TimeResult(LARGE_INTEGER *pBegintime, LPSTR szTime)
{
LARGE_INTEGER endtime;
LARGE_INTEGER freqtime;
LARGE_INTEGER resulttime;
QueryPerformanceCounter(&endtime);
QueryPerformanceFrequency(&freqtime);
resulttime.QuadPart = (endtime.QuadPart - pBegintime->QuadPart) * 1000 / freqtime.QuadPart;
sprintf(szTime, "%I64d小时%I64d分%I64d.%03I64d秒", resulttime.QuadPart / 3600000, (resulttime.QuadPart / 60000) % 60, (resulttime.QuadPart /1000) % 60, resulttime.QuadPart % 1000);
return szTime;
}
int main()
{
const int x = 2560800;
int i = 0, count = 0, j = 0, n = 0;
unsigned char *tab = (unsigned char*)malloc(x);
memset(tab, 0x00, x);
LARGE_INTEGER b, f, e, r;
QueryPerformanceCounter(&b);
for (i=1; i<x; ++i)
{
if (tab[i])
continue;
if (GCD(x, i) == 1)
count++;
else
{
for (j=0, n=0; n<x; ++j)
{
n = i * j;
if (n<x)
tab[n] = 1;
}
}
}
QueryPerformanceFrequency(&f);
QueryPerformanceCounter(&e);
r.QuadPart = (e.QuadPart - b.QuadPart) * 1000 / f.QuadPart;
printf("%d\n", count);
printf("%lld小时%lld分%lld.%03lld秒\n", r.QuadPart / 3600000, (r.QuadPart / 60000) % 60, (r.QuadPart /1000) % 60, r.QuadPart % 1000);
free(tab);
getchar();
}
#include <stdio.h>
#include <Windows.h>
inline BOOLEAN IsEven(ULONG64 x)
{
if (x & 0x01ULL)
return FALSE;
else
return TRUE;
}
ULONG64 GCD(ULONG64 x, ULONG64 y)
{
if (x < y)
return GCD(y, x);
if (y == 0)
return x;
else
{
if (IsEven(x))
{
if (IsEven(y))
return GCD(x>>1, y>>1) << 1;
else
return GCD(x>>1, y);
}
else
{
if (IsEven(y))
return GCD(x, y>>1);
else
return GCD(y, x-y);
}
}
}
int main()
{
const int x = 25608;
int i = 0, count = 0;
for (i=0; i<x; ++i)
{
if (GCD(x, i) == 1)
count++;
}
printf("%d\n", count);
getchar();
}
inline BOOLEAN IsEven(ULONG64 x)
{
if (x & 0x01ULL)
return FALSE;
else
return TRUE;
}
ULONG64 GCD(ULONG64 x, ULONG64 y)
{
if (x < y)
return GCD(y, x);
if (y == 0)
return x;
else
{
if (IsEven(x))
{
if (IsEven(y))
return GCD(x>>1, y>>1) << 1;
else
return GCD(x>>1, y);
}
else
{
if (IsEven(y))
return GCD(x, y>>1);
else
return GCD(y, x-y);
}
}
}