质数 / 素数:大于1的自然数,除了1和自身外,无法被其他自然数整除
合数:大于1且不是质数的数
1和0既不是质数也不是合数
#include <stdio.h>
#include <stdlib.h>
int main() {
int num;
printf("请输入一个自然数:");
scanf_s("%d", &num);
if (num == 1 || num == 0) {
printf("%d不是质数\n", num);
return 0;
}
for (int i = 2; i < num; i++) {
if (num % i == 0) {
printf("%d不是质数\n", num);
return 0;
}
}
printf("%d是质数\n", num);
system("pause");
return 0;
}
哥德巴赫猜想(现代版):“任一大于5的整数都可写成3个质数之和”。
等价版本:“任一大于2的偶数都可写成两个质数之和”。
案例:验证4~100内所有偶数都可写成两个质数之和
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool isPrimeNumber(int num);
int main() {
for (int i = 4; i <= 100; i += 2) {
//偶数的加数都为质数,因此范围定在2~k/2(因为大于k/2后,加数只是反过来写了而已)
for (int a = 2; a <= i / 2; a++) {
if (isPrimeNumber(a)) {
int b = i - a;
if (isPrimeNumber(b)) {
printf("%d = %d + %d,加数均为质数\n", i, a, b);
}
}
}
}
system("pause");
return 0;
}
bool isPrimeNumber(int num) {
for (int i = 2; i < num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}