JAVA(求修改代码)读入整数n,对于大于等于6的偶数,分解为两个素数之和。

程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat(0<repeat<10),做repeat次下列运算:读入整数n,对于大于等于6的偶数,分解为两个素数之... 程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入整数n,对于大于等于6的偶数,分解为两个素数之和。要求:
如果n<6或n不是偶数,则要求输出(n不符合题目要求);否则要求输出一组素数之和a+b,且符合:(1)a<=b;(2)a是所有能分解的格式中的最小素数。
import java.util.*;
public class T{
public static void main(String []args){
int ri,repeat,n,a,b,i,j;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++)
{
n=in.nextInt();
if (n<6||n%2!=0) System.out.println(n+"不符合题目要求");
else if(n>=6&&n%2==0)
{ p1: for(a=3;a<n;a++)
{b=n-a;
for(i=2;i<Math.sqrt(a);i++){ {
for(j=2;j<Math.sqrt(b);j++){
if(b%j!=0&&a%i!=0) {System.out.println(n+"="+a+"+"+b);break p1;}}}}

}

}
}}}
为什么我这个结果中b不是个素数,怎么修改。
原程序/*---------*/中填空import java.util.*;
public class T{
public static void main(String []args){
int ri,repeat,n,a,b,i,j;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1;ri<=repeat;ri++){
n=in.nextInt();
/*---------*/
}
}
}
展开
 我来答
changyiduU4Q
高粉答主

2019-10-02 · 关注我不会让你失望
知道答主
回答量:264
采纳率:100%
帮助的人:8.6万
展开全部

当满足条件b%j!=0&&a%i!=0时,有可能出现两数可以被其他数整除。例如a为10不被3整除,b为12不被5整除。

修改方法:

通过先计算一定数量的素数,放在一个数组中,然后从小到大遍历,若是n-a=b,若a和b都在数组中,则满足题目条件。

扩展资料

素数计算代码

Scanner input = new Scanner(System.in);

System.out.print("Find all prime numbers <= n, enter n: ");

int n = input.nextInt();

boolean[] primes = new boolean[n + 1]; // Prime number sieve

for (int i = 0; i < primes.length; i++) {// Initialize primes[i] to true

primes[i] = true; }

for (int k = 2; k <= n / k; k++) {

if (primes[k]) {

for (int i = k; i <= n / k; i++) {

primes[k * i] = false; // k * i is not prime}}}

final int NUMBER_PER_LINE = 10; // Display 10 per line

int count = 0; // Count the number of prime numbers found so far

// Print prime numbers

for (int i = 2; i < primes.length; i++) {

if (primes[i]) {count++;

if (count % 10 == 0) 

System.out.printf("%7d\n", i);else

System.out.printf("%7d", i);}}

System.out.println("\n" + count + " prime(s) less than or equal to " + n);

素数分布规律

以36N(N+1)为单位,随着N的增大,素数的个数以波浪形式渐渐增多。

性质

质数具有许多独特的性质:

(1)质数p的约数只有两个:1和p。

(2)初等数学基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的。

(3)质数的个数是无限的。

参考资料来源:百度百科-质数

miaoch
2017-04-25 · TA获得超过1204个赞
知道小有建树答主
回答量:814
采纳率:83%
帮助的人:341万
展开全部
首先素数的定义是 只有1和本事两个约数
而你写的是if(b%j!=0&&a%i!=0) {}
这是啥?找到一个就是素数了?那我问你10是素数吗?那10%3是不是不为0?
不知道你写的是什么逻辑 乱七八糟的
你还是把原来需要填空的地方标出来
更多追问追答
追问
已补充需要填空处
追答
for(ri=1;ri<=repeat;ri++){
    n=in.nextInt();
    /*---------*/
    if (n < 6 || n % 2 != 0) {
        System.out.println(n+"不符合题目要求"); 
        continue;
    }
    f1:
    for (i=3;i<n/2;i++) {
        //先确定a值b值
        a = i;
        b = n - i;
        //如果a或者b不是素数重新遍历
        for (j=2;j<Math.sqrt(a);j++) {
            if (a % j == 0) continue f1;
        }
        for (j=2;j<Math.sqrt(b);j++) {
            if (b % j == 0) continue f1;
        }
        //否则a和b就是需要的结果
        System.out.println(n + "=" + a + "+" + b);
        break;
    }
    if (i >= n/2) {
        System.out.println(n+"不符合题目要求");
    }
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式