黑马程序员技术交流社区
标题:
关于质数的问题、求解
[打印本页]
作者:
小痞痞
时间:
2013-9-21 19:52
标题:
关于质数的问题、求解
本帖最后由 小痞痞 于 2013-9-24 16:48 编辑
要求;输入一个数输出这个书能被分解成那两个质数的和
import java.util.Scanner;
class PrimeNum {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
for (int i = 1;i <= x/2; i++) { //分解输入的数
int a = i;
int b = x - i;
if (isPrime(a) && isPrime(b)) {
System.out.println(x + "=" + a + " + " +b);
}
}
}
//判断一个数是否是质数
public static boolean isPrime(int a) {
for (int i = 2;i < i-1 ;i++ ) {
if (a % i == 0) return false;
}
return true;
}
}
复制代码
这个代码那块出问题了啊???
可以查分出来 但是拆除来所有的都输出出来了
求解怎么修改才行啊
作者:
yting_xmei1129
时间:
2013-9-21 20:25
刚刚测试了你的代码,你的质数判断方法出现了一个初学者常犯的错误,应该说是你自己的粗心吧! for (int i = 2;i < i-1 ;i++ ) { 这一行代码, 应该将 i - 1 改成 a - 1,如果不改,直接返回false。改了的话就可以得到你想要的结果!!!如果不是追求高效率的话这样的算法也可以,稍微增加点效率的话可以改成:
// 判断一个数是否是质数
public static boolean isPrime(int a) {
for (int i = 2; i <= Math.sqrt(a); i++) {
if ((a % i) == 0){
return false;
}
}
return true;
}
以后别那么粗心哦亲!再出现这样的问题冷静点思考就行了、、、
作者:
落木随风
时间:
2013-9-21 20:49
判断是否为素数的方法中,应该将for循环里面这样写 for(int i=2;i< a\2 ; i++)其他的不用变,判断素数不用非要从2----X-1都遍历一遍,只要遍历到x/2就行。
作者:
黄文伯
时间:
2013-9-21 22:58
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
作者:
七宝
时间:
2013-9-23 09:38
import java.util.HashSet;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner sc = new Scanner(System.in);
int getNum = sc.nextInt();
getPrime(getNum);// 调用函数
}
private static void getPrime(int num) {
HashSet<Integer> set = new HashSet<Integer>();// 定义集合 用来存放1到num的质数
set.add(2);// 2是质数也是约数
// 如果除开1和本身外没有其他的数整除就是质数
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= i; j++) {
if (i == 1)
continue;
if (i == num)
continue;
if (i % j != 0)
set.add(i);// 讲1到num的质数存放在集合
}
}
// 定义数组将集合中的数存入数组
int[] arr = new int[set.size()];
int m = 0;
for (Integer i : set) {
arr[m++] = i;
}
// 循环 如果满足2质数相加等于num 则输出,没有则输出没有
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if ((arr[i] + arr[j]) == num) {
System.out.println("第一个数为: " + arr[i]);
System.out.println("第二个数为: " + arr[j]);
}
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2