C语言 - 验证哥德巴赫猜想
/*哥德巴赫猜想:对于每一个小于等于INT_MAX且大于2的偶数,输出它的质数分解式,同时把输出结果保存在指定本地文本文件中*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <windows.h>
#include <math.h>
int Sum = 4;//代表每一个偶数
int PrimeOrNot(int PrimeOrNot_Num);
int main(int argc, char const *argv[])
{
SetConsoleCP(65001);
SetConsoleOutputCP(65001);
printf("\n本程序用于验证哥德巴赫猜想:\n\n"
"对于每一个小于等于INT_MAX且大于2的偶数,如果它满足哥德巴赫猜想,"
"那么程序将在独立的一行输出它的质数分解式,否则程序将在独立的一行输出错误提示并终止验证。"
"程序会实时地把输出结果保存在本地文本文件\"D:\\Goldbach_conjecture.txt\"中。\n\n" );
system("pause");
FILE *fp = NULL;
fp = fopen("D:\\Goldbach_conjecture.txt","w+");
while(Sum <= INT_MAX)
{
if (PrimeOrNot(Sum - 2) == 1)
{
fprintf(fp,"%d = 2 + %d\n", Sum,Sum - 2);
printf("%d = 2 + %d\n\n", Sum,Sum - 2);
Sum += 2;
continue;
}
for (int i = 3; i <= (int)(((long int)(Sum + 1)) / ((long int) 2)); i += 2)
{
if (PrimeOrNot(i) == 1 && PrimeOrNot(Sum - i) == 1)
{
fprintf(fp,"%d = %d + %d\n", Sum,i,Sum - i);
printf("%d = %d + %d\n\n", Sum,i,Sum - i);
goto next;
}
}
fprintf(fp,"Goldbach is wrong ! %d doesn\'t meet the Goldbach conjecture.\n", Sum);
printf("Goldbach is wrong ! %d doesn\'t meet the Goldbach conjecture.\n\n", Sum);
break;
next:Sum += 2;
}
fprintf(fp,"--End--\n");
printf("--End--\n");
fclose(fp);
fp = NULL;
system("pause");
return 0;
}
int PrimeOrNot(int PrimeOrNot_Num)
{
int yes = 1;
for (int PrimeOrNot_i = 2; PrimeOrNot_i <= (int)sqrt(PrimeOrNot_Num); ++PrimeOrNot_i)
{
if ((((long int)PrimeOrNot_Num) + ((long int)PrimeOrNot_i)) % ((long int)PrimeOrNot_i) == 0)
{
yes = 0;
break;
}
}
return yes;
}