题目
题解
- 1、首先编写求质数函数,注意 两个语言的求根方法
Java : Math.sqrt(n)
其中 Math 在 Java.lang,Math
下
C++ : sqrt(n)
在 #include<math.h>
头文件下
- 2、关键为 ,双重循环扫,第一层i穷举4到n,第二层j从2到n/2穷举和,如果j是素数,就输出j和i-j并退了当前的j循环,继续下一个i数
代码
Java 版
package luoguFunction;
import java.util.Scanner;
public class P1304 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in) ;
int n = sc.nextInt() ;
for(int i = 0 ; i<= n ;i++) {
for(int j =2 ;j <n/2 ;j++ ) {
if(p(j)&&p(i-j)) System.out.println(i+"="+ j+ "+" + (i-j));
}
}
}
// 求质数
public static boolean p(int n) {
for(int i = 2 ; i <= Math.sqrt(n) ;i++)
if(n%i==0) return false ;
return true ;
}
}
C++ 版
形式一:
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int n, s = 0;
bool p(int n) {
for (int i = 2; i*i <= n; i++)
if (n % i == 0) return false;
return true;
}
int main() {
int i, j;
cin >> n;//读入
for (i = 4; i <= n; i++)//从4到n扫
for (j = 2; j <= i / 2; j++)//因为1不是质数,不用考虑,一直到i的一半就可以了,不然i一减就重复了
if (i % 2 != 0) break;//因为哥德巴赫猜想是说大于4的偶数,如果i是奇数就弹了
else if (p(j) && p(i - j)) { cout << i << "=" << j << "+" << i - j << endl; break; }//其实没必要写else,因为如果不行的已经弹了,现在的i一定是偶数并且j和i-j都是质数的话就输出,再弹出这个循环
return 0;
}
形式二
#include <iostream>
using namespace std;
#include <algorithm>
/// <summary>
/// 洛谷 函数 P1304
/// 知识点 :质数 德巴赫猜想
/// </summary>
// 质数
bool is_prime(int n){
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
else return true;
}
}
int main01() {
int n;
cin >> n;
for (int i = 4; i <= n; i++) {
for (int j = 2; j <= n / 2; j += 2) { // 质数从2 开始 n/2 的原因后面减法 一版皆为重复
if (is_prime(j) && is_prime(i - j)) cout << i << "=" << j << "+" << i - j << endl; break;
}
}
system("pause");
return 0;
}