?? prim.cpp
字號:
// prim.cpp : Definiert den Einsprungpunkt f黵 die Konsolenanwendung.
//
#include "stdafx.h"
#include <math.h>
#include <string.h>
#include <stdio.h>
#define PXXGLOBAL
#define SHIFT 10
unsigned Ende;
unsigned long SerialYourVar;
unsigned long PrimeNumber, PrimeOffset;
unsigned long DoubleSerialYourVar[2];
union {
unsigned short WordFastSerialYourVar[2];
unsigned char CharFastSerialYourVar[4];
} Fast;
short unsigned FirstFastPrimeNumber;
short unsigned SecondFastPrimeNumber;
#define MAX_TEST 0x4000
#define MAX_TEST_MASK 0x3fff
unsigned long TestArray[MAX_TEST];
PXXGLOBAL void RandomTest(FILE *wp, unsigned long num, unsigned long offset);
PXXGLOBAL void rechne(void);
PXXGLOBAL void SerialRandomOne(void);
PXXGLOBAL void SerialRandomTwo(void);
PXXGLOBAL void FastRandomTest(FILE *wwp,unsigned long number);
PXXGLOBAL void FirstFastSerialRandom(void);
PXXGLOBAL void SecondFastSerialRandom(void);
#define DOUBLE_FAST_OFFSET1 0x73734123L
#define DOUBLE_FAST_OFFSET2 0x10347323L
PXXGLOBAL int main(int argc, char* argv[])
{
printf("Hallo Welt!\n");
rechne();
return 0;
}
PXXGLOBAL void rechne(void)
{
FILE *wp;
unsigned long zahl;
unsigned long i;
unsigned long bruch;
int zwei = 0;
int stueck = 0;
unsigned long ezahl;
unsigned long azahl;
unsigned long offset;
double val;
unsigned long MaxZahl;
int mode=4;
printf("PRIM.EXE %s %s",__DATE__,__TIME__);
switch (mode) {
case 0:
azahl = 1103515245L - 100;
ezahl = 1103515245L + 100;
offset = 0x1234;
break;
case 1: azahl = 10000000L;
ezahl = 10005000L;
offset = 0x1234;
break;
case 2: azahl = 0x80000000L-0x10000L;
ezahl = 0x80000000L;
offset = 0x1234;
break;
case 4:
azahl = 0xff00;
ezahl=0xffff;
offset = 0x1234;
break;
}
/****************************************************************************
Hallo Welt!
PRIM.EXE Dec 31 2005 07:28:33
Primzahlen von 00008000 bis 0000ffff 00001234 sind:
ZAHL 32769 teilbar 3
32771 00008003 Max 000000b5 181 1.810276e+002
RandomNumber 8003 Cycle 32768
ZAHL 32773 teilbar 13
ZAHL 32775 teilbar 3
ZAHL 32777 teilbar 73
32779 0000800B Max 000000b5 181 1.810497e+002
RandomNumber 800b Cycle 32768
ZAHL 32781 teilbar 3
32783 0000800F Max 000000b5 181 1.810608e+002
RandomNumber 800f Cycle 8192
ZAHL 32785 teilbar 5
ZAHL 32787 teilbar 3
32789 00008015 Max 000000b5 181 1.810773e+002
RandomNumber 8015 Cycle 65536
ZAHL 32791 teilbar 11
ZAHL 32793 teilbar 3
ZAHL 32795 teilbar 5
32797 0000801D Max 000000b5 181 1.810994e+002
RandomNumber 801d Cycle 65536
ZAHL 32799 teilbar 3
32801 00008021 Max 000000b5 181 1.811105e+002
RandomNumber 8021 Cycle 65536
32803 00008023 Max 000000b5 181 1.811160e+002
RandomNumber 8023 Cycle 32768
****************************************************************************/
printf("\nPrimzahlen von %08lx bis %08lx %08lx sind: ", azahl, ezahl, offset);
/*
* Z鋒lerschleife des Bereichs
*/
for (zahl = azahl; zahl < ezahl; zahl++) {
zwei = 0;
/*
* Divisor festlegen
*/
val =sqrt((double)zahl);
MaxZahl=(long)(val*1.001);
if ((zahl & 1) == 1) {
for (i = 2; i < MaxZahl && zwei <= 1; i++) {
bruch = zahl % i;
/*
* Wenn bruch=0 ist, wird zwei um 1 erh鰄t
*/
if (bruch == 0) {
printf("\n\tZAHL %12lu teilbar %12lu",zahl,i);
/* fprintf(wp,"\n\tZAHL %12lu teilbar %12lu",zahl,i); */
zwei = zwei + 1;
break;
}
}
/*
* Wenn beim letzten Durchlauf zwei=1 ist, dann ist es eine Primzahl
* und wird ausgegeben
*/
if (zwei == 0) {
printf("\n %10lu %08lX Max %08lx sqrt==%10lu %8.6e ", zahl,zahl,MaxZahl,MaxZahl,val);
wp = fopen("PRIM.TXT","at");
fprintf(wp,"\n %10lu %08lX Max %08lx sqrt==%10lu %8.6e ", zahl,zahl,MaxZahl,MaxZahl,val);
stueck ++;
switch (mode) {
default:
RandomTest(wp,zahl, 0x7373); // 0x73734123L
break;
case 4:
FastRandomTest(wp,zahl);
break;
}
fclose(wp);
}
}
if (Ende) {
break;
}
}
fclose(wp);
}
#define FAST_PRIME 0x7FFF00AB
PXXGLOBAL void RandomTest(FILE *wwp,unsigned long number, unsigned long offset)
{
long cnt=0;
long iicnt=0;
__int64 longcnt=0;
double val;
int endeloop=0;
PrimeNumber= number; // 2147418487UL
// PrimeNumber = 0x7FFF0013;
PrimeOffset = offset; // 0x73734123L;
long testcount=0;
#define START_VALUE 0x432423
#define START2_VALUE 0x3456342
DoubleSerialYourVar[0]=SerialYourVar=START_VALUE;
DoubleSerialYourVar[1]= START2_VALUE;
memset(TestArray,0x00,sizeof(TestArray));
FILE *pp;
pp=fopen("MASK.TXT","wa");
testcount=0;
fprintf(pp,"\r\n %08lx %12lu",PrimeNumber,PrimeOffset);
SerialRandomOne();
do {
/* if (testcount<5000) {
fprintf(pp,"\n%08X %06u",SerialYourVar,(SerialYourVar>>SHIFT)&MAX_TEST_MASK);
}
*/
SerialRandomOne();
SerialRandomTwo();
TestArray[(SerialYourVar>>SHIFT)&MAX_TEST_MASK]++;
cnt++;
testcount++;
longcnt++;
// iicnt++;
if (DoubleSerialYourVar[0]==START_VALUE && DoubleSerialYourVar[1]==START2_VALUE) {
endeloop++;
}
} while (endeloop==0); // cnt <0x10000000 &&
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -