「JAVA素数运算」JAVA计算素数
本篇文章给大家谈谈JAVA素数运算,以及JAVA计算素数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java求素数问题
- 2、java求素数
- 3、JAVA 求质数素数
- 4、Java求素数
- 5、java里怎么实现素数?
- 6、JAVA素数算法
java求素数问题
你的逻辑有问题,好好看看。if(xx){xxx}else{xxxx}这个逻辑不对
你自己看,如果输入2,2的平方根比2小吧,你的下面的循环就不成立,所以直接结束。
如果输入 9,9的平方根是3,当i=2时,2《=3,先走if条件(9%2!=0)直接进入else{XX},当然会输出9不是素数,然后break。
你还是把循环知识再看看吧。
看上一回答,正确代码在那里,嫌我啰嗦直接跳过。
java求素数
首先楼主应该对素数的定义已经清楚了吧?其实就是一个数,如果存在1和它本身以外,有数能整除它,这个数就不是素数.
在这里,有2个关键的变量,我估计解释一下你就能看得明白这个算法了.
1.关于变量k.变量k的作用是优化整个算法,因为比如要判断一个数13是不是素数,我们没必要从2循环到13.只要循环到对13开根号.13开根号大概是3.6多,强转为int类型后是3.也就是说只要检查2,3是否能整除13.如果不能,13肯定是一个素数.因为比如48这个数,你前面检测到被4整除等于12,那么继续循环超过Math.sqrt(48)的话,无非就是得到一个反过来的被12除等于4的结果.这个没有必要.
2.关于变量j.注意点1:j是在最外层的循环体中定义的.这个时候刚定义完,j的值是初始的0.然后j从2开始,一直到小于等于k结束.这里是控制尝试整除的循环次数.一旦发现在这个范围内有数能整除i,那么就跳出循环.
所以,对于你不理解的那个部分,首先确定一点,程序只要执行到break,就说明这个数是素数.
例如我们这次k = 10,那么是要从j = 2到10逐一检测 i 是不是能被 j 整除.当j = 7的时候比如可以整除了,就跳出当前内层循环了.这时候, j 显然是不大于 k 的,因为只要是中途跳出,因为内层循环(j = 2; j = k; j++)的控制,只要在循环过程中跳出来的,那么j 肯定 = k.
只有循环到j = 10依然没有break的话,根据for循环的执行顺序,会执行j++,然后去判断j = k 是否为true,为true则继续下一次循环,否则循环结束.而在这里,如果到10还没有能够整除的话,j是会在10的基础上自增的.这时候j就=11了.
那么if ( j k )就不成立了,则i 不会被输出.
总结一点:就是如果中途or最后一次循环,找到能整除的数了,那么因为break的关系,最后就不会执行 j++, 所以j k (亦即j = k 的取反)表示没有找到能整除的数.其实j最大也就只能等于k+1.
另外,,你也可以自己修改修改,来加深理解.例如
boolean isPrime; //定义布尔变量判断是否素数.是:true;否:false
for (int i = 3; i = 100; i++) {
isPrime = true;
int k = (int) Math.sqrt(i);
for (int j = 2; j = k; j++) {
if (i % j == 0) {
isPrime = false; //如果能够有数整除i,那么就不是素数.
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
这样就没有必要在外层循环里就定义j这个变量了.如果我上面说的你理解还是比较困难,可以先理解用布尔变量来控制的写法.这个理解了,用j k 判断的就也很容易理解了.
JAVA 求质数素数
public class Test {
public static void main(String[] args) {
getValues();
}
public static void getValues(){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一个整数:");
try {
int num=Integer.parseInt(br.readLine());//从控制台获得输入的数据
String resultStr="";//结果字符串
boolean flag=false;//是否能被整除
for (int i = 2; i = num; i++) {//大循环是把每一个数拿出来
for (int j = 2; j i; j++) {//小循环是把当前拿出的这个数从2开始除直到这个数之前
if(i%j==0){flag=true;}//如果能被整除(没有余数)则标识给true
}
if(flag==false){resultStr+=i+" ";}//如果标识为false说明没被赋过值,也就是除了2和本身以外没别的数能除开,则给结果里外循环的当前这个数加入到输出字符串中
flag=false;//别忘了再给标识重设置为false为下次外循环做准备
}
System.out.println("2到"+num+"之间的所有质数有:"+resultStr);
br.close();
getValues();
} catch (Exception e) {
e.printStackTrace();
}
}
}
就是提供个思路,希望有用x_x
Java求素数
在if(i%j!=0) {j=j+1;}后面加一句 else break;就行了。
完整的程序如下:
import java.util.Scanner;
public class Test40025{
public static void main(String args[]){
int ri, repeat;
int count, i, j, k, m, n, sum;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri=repeat; ri++)
{
m=in.nextInt();
n=in.nextInt();
count=0;
sum=0;
i=m;
while(i=n)
{ if (i==1)
{count=count+1;
sum=sum+2;
i=i+2;
}
j=2;
while(ji)
{
if (j==i-1)
{count=count+1;
sum=sum+i;}
if(i%j!=0)
{j=j+1;}
else break; //这里加了一句
}
i=i+1;
}
System.out.println("count="+count+", sum="+sum);
}
}
}
运行结果:
3
1 10
count=4, sum=17
20 35
count=3, sum=83
14 16
count=0, sum=0
java里怎么实现素数?
import java.util.Scanner;
//质数又称素数,是指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
public class PrimeNumber {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);// 扫描器,接收控制台输入信息
System.out.print("请输入一个整数:");
try {
int num = scan.nextInt();// 取出控制台输入的信息
if (isPrime(num)) {// 调用isPrime()方法
System.out.println(num + "是素数!");// 若isPrime()方法返回true,输出是素数
} else {
System.out.println(num + "不是素数!");// 若isPrime()方法返回false,输出不是素数
}
} catch (Exception e) {
System.out.println("请输入整数");// 捕捉异常,若输入的不是整数,输出异常
}
}
/**
* pre
* 用于判断一个数是否为素数,若为素数,返回true,否则返回false
* /pre
*
* @param a
* 输入的值
* @return true、false
*/
public static boolean isPrime(int a) {
boolean flag = true;
if (a 2) {// 素数不小于2
return false;
} else {
for (int i = 2; i = Math.sqrt(a); i++) {
if (a % i == 0) {// 若能被整除,则说明不是素数,返回false
flag = false;
break;// 跳出循环
}
}
}
return flag;
}
}
JAVA素数算法
我给你个算法,言简意赅
int n = 23;//所求素数范围(0-n以内)
int j = 1;
for (int i = 2; i n; i++) {
for (j = 2; j i; j++) {
if (i % j == 0)
break;
}
if (j = i) {
System.out.println(i);
}
}
关于JAVA素数运算和JAVA计算素数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-07,除非注明,否则均为
原创文章,转载请注明出处。