JAVA(求修改代码)读入整数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();
/*---------*/
}
}
} 展开
当满足条件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)质数的个数是无限的。
参考资料来源:百度百科-质数
而你写的是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+"不符合题目要求");
}
}