1.题目:将0-N之间的偶数拆分为素数
2.思路:写一个判断是否为素数的函数,素数判断解决时间复杂度则只需要考虑到sqrt(n)之间的数
3.学习到的点:
- (1)使用了sqrt()函数但是一开始在vs没有引入<math.h>的库,通过了,洛谷中显示编译 未通过,引入之后就解决了
- (2)prime函数中,return 0 和 return 1的区别,return 0表示的是程序正常终止,return 1表示的是程序异常终止。
- 一开始写的时候,把return 0写入了if下的else,vs中可以通过,但是洛谷中全都是WA,看了别人的题解才意识到自己存在的问题。如果是else return 0,那么在遍历寻找素数的时候,如果不能整除,就会返回,达不到所有数字都遍历的效果,放到for循环的外侧,表示的就是所有的数字都判断完了,都不能整除,则为素数。
#include<iostream>
#include<math.h>
using namespace std;
//0-N 之间的质数拆分
int prime(int n) {
for (int j = 2;j <= (int)sqrt(n);j++) {
if ((n % j) == 0) return 1;
}
return 0;
}
int main() {
int N,min=0,max=0;
cin >> N;
for (int i = 4;i <= N;i=i+2) {
for (min = 2;min < N;min++) {
max = i - min;
if (prime(min) == 0 && prime(max) == 0) {
cout << i << "=" << min<<"+" << max << endl;
break;
}
}
}
}