第一期day4
题目链接
7.24:哥特巴赫猜想 涉及思路:素数
题目描述
输入一个偶数 N N N,验证 4 ∼ N 4\sim N 4∼N 所有偶数是否符合哥德巴赫猜想:任一大于 2 2 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10 10 10, 10 = 3 + 7 = 5 + 5 10=3+7=5+5 10=3+7=5+5,则 10 = 5 + 5 10=5+5 10=5+5 是错误答案。
输入格式
第一行输入一个正偶数 N N N
输出格式
输出 N − 2 2 \dfrac{N-2}{2} 2N−2 行。对于第 i i i 行:
首先先输出正偶数 2 i + 2 2i+2 2i+2,然后输出等号,再输出加和为 2 i + 2 2i+2 2i+2 且第一个加数最小的两个质数,以加号隔开。
样例 #1
样例输入 #1
10
样例输出 #1
4=2+2
6=3+3
8=3+5
10=3+7
思路
就是一个质数的求解
还是就排除1,然后2必是素数
接着是用一个limit来减少计算量
limit=sqrt(n)+1,这个+1可以防止漏了一个
AC代码
#include <iostream>
#include <cmath>
using namespace std;
int sushu(int n)
{
if (n == 2)
return 1;
double limit;
int i;
limit = sqrt(n) + 1;
for (i = 2; i <= limit; i++)
{
if (n % i == 0)
return 0;
}
if (i > limit)
return 1;
}
int main()
{
int t, n = 4;
cin >> t;
int j;
for (n = 4; n <= t; n += 2)
{
for (int i = 2; i <= n; i++)
{
j = n - i;
if (sushu(i) == 1 && sushu(j) == 1)
{
cout << n << '=' << i << '+' << j << endl;
break;
}
}
}
return 0;
}