当前位置:首页 » 编程语言 » 素数java

素数java

发布时间: 2022-01-23 15:43:35

A. java 判断素数

importjava.util.Scanner;

publicclassPrimeNumber{

publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
System.out.println("请输入一个数:");

intnum=scanner.nextInt();//输入的待判断的数字

if(isPrime(num))
System.out.println("数字"+num+"是素数");
else
System.out.println("数字"+num+"不是素数");
}

/**
*判断一个数是否是素数
*算法核心:
* 定理:如果n不是素数,则n有一个因子d满足1<d<=sqrt(n)
* 证明:如果n不是素数,则由定义:n有一个因子d满足1<d<n。如果d大于sqrt(n),则n/d是满足1<n/d<=sqrt(n)的一个因子
*
*由此可知:1.小于等于2的不是素数2.2的倍数的数也不是素数3.如果从小到大开始遍历,一直到sqrt(n)还不能找到一个因子d,
* 则可以说明该数是素数
*
*@paramnum待判断的数
*@return判断结果
**/
privatestaticbooleanisPrime(intnum){
if(num<=2||num%2==0)
returnfalse;
for(inti=3;i*i<=num;i+=2){
if(num%i==0)
returnfalse;
}

returntrue;
}

}


详细的解释已经写在上面的代码的注释中了,当然这种算法不算最优,但是比较简单易理解。当然更优的方案可以采用“筛选法”,具体的可以自行网络

B. 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 的取反)表示没有找到能整除的数.其实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 判断的就也很容易理解了.

C. Java中 什么是素数什么条件

素数是指不能被除了一和自身整除的数,所以判断num是不是素数只有从二开始一直除到num/2,都不能整除就返回true,表示是素数,否则返回false,表示不是素数。

D. java 1到100内的质数

int i,j;

for(i = 2; i <= 100; i++){//从2数到100,判断之间的每一个数是否是质数

//下面的循环是质数判断过程

for(j = 2; j <= i/2; j++){

if(i % j == 0)

break;//如果这个数能被一个数整除,那么这个数不是质数。break的作用是跳出此次循环,进入下一次循环。

}

if(j > i/2){

System.out.println(i);//如果这个数不能被自身1/2的数整除,他就是质数,输出这个数.System.out.println()这个语句就是输出语句

}

}

System.out.println();//这句语句是多余的,什么也没打印。

完整代码及运行结果如图。

拓展资料

质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

这道题只要理解质数的计算方法就容易解答。

E. 关于java求素数

素数,除了1和它本身之外不能别的数整除

for(j=2;j<=50;j++){ (从2 开始,把每个小于自己的数都除一遍)

for( i=2;i<=j/2;i++){ (i的值只需要是j的一半就可以判断,列如j=30,i从2开始,只需要除到i=15就可以)

if(j%i==0) (取余=0,即J可以被I整除)
break;
}
if(i>j/2) (当i的值增加到大于j的一半还没能整除J时,j一定是素数)
{

System.out.println(""+j+"是素数");
}
}
}

F. java里怎么实现素数

importjava.util.Scanner;

//质数又称素数,是指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
publicclassPrimeNumber{

publicstaticvoidmain(String[]args){

Scannerscan=newScanner(System.in);//扫描器,接收控制台输入信息

System.out.print("请输入一个整数:");

try{
intnum=scan.nextInt();//取出控制台输入的信息
if(isPrime(num)){//调用isPrime()方法

System.out.println(num+"是素数!");//若isPrime()方法返回true,输出是素数

}else{

System.out.println(num+"不是素数!");//若isPrime()方法返回false,输出不是素数
}
}catch(Exceptione){
System.out.println("请输入整数");//捕捉异常,若输入的不是整数,输出异常
}
}

/**
*<pre>
*用于判断一个数是否为素数,若为素数,返回true,否则返回false
*</pre>
*
*@parama
*输入的值
*@returntrue、false
*/
publicstaticbooleanisPrime(inta){

booleanflag=true;

if(a<2){//素数不小于2
returnfalse;
}else{

for(inti=2;i<=Math.sqrt(a);i++){

if(a%i==0){//若能被整除,则说明不是素数,返回false

flag=false;
break;//跳出循环
}
}
}
returnflag;
}
}

G. Java语言中,用类的方法求素数

importjava.util.ArrayList;
importjava.util.Scanner;

publicclassPrimeNumber{
/**
*判断一个数是否是素数
*@paramnumber
*@return
*/
publicbooleanisPrimeNumber(intnumber){
booleanisPrimeNumber=false;
intflag=0;
for(inti=2;i<number;i++){
if(number%i==0){
flag=1;
}
}
if(flag==0){
isPrimeNumber=true;
}
returnisPrimeNumber;//返回true时为素数
}
/**
*得到一个区间的素数
*@paramstartNo
*@paramendNo
*@return
*/
publicArrayList<Integer>getPrimeNumber(intstartNo,intendNo){
ArrayList<Integer>list=newArrayList<Integer>();
for(intnum=startNo;num<=endNo;num++){
if(newPrimeNumber().isPrimeNumber(num)){
list.add(num);
}
}
returnlist;
}
/**
*测试
*@paramargs
*/
publicstaticvoidmain(String[]args){
PrimeNumberprimeNumber=newPrimeNumber();
ArrayList<Integer>list=null;
System.out.println("请输入你要测试的数");
intinput=newScanner(System.in).nextInt();
if(primeNumber.isPrimeNumber(input)==true){
System.out.println("您输入的数为素数");
}
else{
System.out.println("您输入的数不是素数");
}
System.out.println("请输入你所要求素数的区间");
System.out.println("请输入区间的下限(较小值)");
intstartNo=newScanner(System.in).nextInt();
System.out.println("请输入区间的上限(较大值)");
intendNo=newScanner(System.in).nextInt();
list=primeNumber.getPrimeNumber(startNo,endNo);
System.out.println("您的区间素数为");
for(inti=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
System.exit(0);
}
}

H. java求素数代码

求1-N以内的所有素数,实现思路如下:

1、 得到1到n之间的素数,存到一个ArrayList集合。

(8)素数java扩展阅读:

实现功能的编程事项:

1、模块化思想。

先拆分需求,先拆分先考虑怎么确定一个数是不是素数,然后再复用到所有。不能把方法堆到一起,否则无法复用代码。

2、注意注释。

就算是自己的测试代码,尽量写清楚注释,这样即使过了三个月,再看代码,也能清晰明了。不要觉得简单,就懒得注释。

3、注意参数命名。

从类名到方法名,再到变量名,都不能随意取名,关于这个命名,不要嫌弃长,重点是意思清楚明白。见名知意(语义化),是最好的。

I. java判断素数的代码

法一:

class Test2
{
public static void main (String []args)
{ int j;
for(int n=1;n<=100;n++)
{
for(j=2;j<=n-1;j++)
{
if(n%j==0)
break;
}
if(j>=n-1)
System.out.println(n);
}
}
}

法二:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class sushu extends Applet implements ActionListener{
TextField t1=new TextField(5);
TextField t2=new TextField(5);
Button b1=new Button("begin");
int m,n;
public void init(){
add(t1);
add(t2);
add(b1);
b1.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
m=Integer.parseInt(t1.getText());
n=Integer.parseInt(t2.getText());
repaint();
}
public void paint(Graphics g){
boolean f;
int i,j,k=0;
for(i=m;i<=n;i++){
f=true;
for(j=2;j<=i-1;j++)
if(i%j==0)
{f=false;break;}
if(f){
g.drawString(" "+i,(k%10)*20+20,(k/10)*60+80);
k=k+1;
}

}
}
}

J. java怎么判断素数

1、目前使用较有效的方法是试除法。用试除法判断一个自然数a是不是素数时,用各个素数从小到大依次去除a,如果到某一个素数正好整除,这个a就可以断定不是素数;如果不能整除,当不完全商又小于这个素数时,就不必再继续试除,可以断定a必然是素数。
2、素数又称质数。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
3、素数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。目前为止,人们未找到一个公式可求出所有素数,所以还没有固定的判断公式。
4、一般记住100以内的素数就可以了。有2、3、5、7、11、13、19、17、23、29、37、31、41、47、43、53、59、61、71、67、73、83、89、79、97,一共25个。

热点内容
网易苹果游戏怎么转移到安卓 发布:2024-11-15 00:07:52 浏览:270
win7php环境搭建 发布:2024-11-15 00:06:55 浏览:17
erpjava 发布:2024-11-14 23:52:23 浏览:253
电脑版地平线四怎么连上服务器 发布:2024-11-14 23:46:42 浏览:472
ios怎么变安卓 发布:2024-11-14 23:46:36 浏览:333
win7共享xp打印机拒绝访问 发布:2024-11-14 23:45:29 浏览:750
引起资源配置失效的原因有哪些 发布:2024-11-14 23:35:22 浏览:15
c语言打字 发布:2024-11-14 23:11:06 浏览:893
存储程序和程序控制的原理 发布:2024-11-14 22:53:23 浏览:323
python读取json数据 发布:2024-11-14 22:51:52 浏览:931