时间长了不写东西果然对代码很生疏。
顺便学习一下一个欧拉定理:
a^ψ(p) ≡ 1 (mod p)
CODE:EulerFunc.cpp
#include <stdio.h>
__declspec(naked)int _stdcall GetFactor(int a, int b)
{
_asm
{
PUSH ECX;
PUSH EDX;
MOV EAX, [ESP + 0xc];
MOV ECX, [ESP + 0x10];
lNext:
CMP EAX, ECX;
JG lCalc;
XCHG EAX, ECX;
lCalc:
CDQ
IDIV ECX;
MOV EAX, EDX;
CMP EDX, 0;
JE lEnd;
JMP lNext;
lEnd:
MOV EAX, ECX;
POP EDX;
POP ECX;
RET 08H;
}
}
__declspec(naked)int _stdcall EulerFunc(int nData)
{
_asm
{
PUSH EBX;
PUSH ECX;
XOR ECX, ECX;
XOR EBX, EBX;
lNext:
INC ECX;
CMP ECX, [ESP + 0xc];
JG lEnd;
PUSH [ESP + 0xc];
PUSH ECX;
CALL GetFactor;
CMP EAX, 1;
JNE lSkip;
INC EBX;
lSkip:
JMP lNext;
lEnd:
MOV EAX, EBX;
POP ECX;
POP EBX;
RET 0x4;
}
}
void main()
{
for(int i = 1; i < 100; i++)
{
printf("φ(%d) = %d\n", i, EulerFunc(i));
}
getchar();
}