发布网友 发布时间:2022-04-24 11:25
共5个回答
热心网友 时间:2023-08-03 20:09
判断number是否是素数有这么几种方法:
(1)用2至number-1之间的所有数去整除number,如果有一个能被整除,说明number是非素数;除非所有的数都不能被整除,才说明number是素数。
(2)用2至number/2之间的所有数去整除number,如果有一个能被整除,说明number是非素数;除非所有的数都不能被整除,才说明number是素数。
(3)用2至number的平方根之间的所有数去整除number,如果有一个能被整除,说明number是非素数;除非所有的数都不能被整除,才说明number是素数。
这3种的方法的效率是逐渐提高的。下面列出了第3种方法的实现:
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
int number; // 输入的数字
Scanner input = new Scanner(System.in);
System.out.println("请输入数字");
number = input.nextInt(); // 输入数字
if(isPrimeNumber(number)){
System.out.println(number + "是一个素数");
}
else{
System.out.println(number + "是一个非素数");
}
}
public static boolean isPrimeNumber(int num){
if(num < 2){
System.out.println("数据错误");
return false;
}
int k = (int)Math.sqrt(num); //num的平方根
int i;
for(i=2; i<=k; i++){ //依次用2..k之间的数去整除num,如果没有一个数能被整除,说明num是素数
if(num % i == 0){
break;
}
}
if(i > k){
return true;
}
return false;
}
}
如果对你的程序进行修改,也可这样:
public static void main(String[] args) {
int number;// 输入的数字
int j = 2;
Scanner input = new Scanner(System.in);
System.out.println("请输入数字");
number = input.nextInt();// 输入数字
for(j=2;j<number;j++){
if(number%j == 0) {
System.out.println("这不素数");
break;
}
}
if(j>=number)
System.out.println("这是素数");
}
请采纳答案,支持我一下。追问虽然你并没有解释我的疑问,但很高兴我又知道了两种方法,谢谢你
热心网友 时间:2023-08-03 20:09
一个数n,他自己的一半n/2,是他除1以外可以整除的极限。比n/2大的数,假设为m。那么n/m的结果大于1小于2。所以判断到j<i/2就可以了。
热心网友 时间:2023-08-03 20:10
很简单啊,当j=i/2的时候,i除以j得到的结果就是2,j>i/2的时候,得到的结果只能是1到2之间的非整数了。所以没必要再判断了。追问已经明白了,谢谢,不过。。。。。没金币了,真的很不好意思。
追答没关系,我表达的也不太好,你采纳的那个人说的比我清楚
热心网友 时间:2023-08-03 20:10
假如有400这个数字,他的一半是200,400除以[200-400]区间的数字,JAVA中取整后总是为1,那么还有必要去循环这么多次吗,这是个分界点追问我明白了,谢谢
热心网友 时间:2023-08-03 20:11
你这写的是对的吗?运行过?没问题?,,,你说句话,感觉问题蛮严重。追问这个是没问题的,书上写的,运行过了