求教JAVA求素数

求教JAVA求素数,第1张

具我了解最小的素数是2的说,举例来说,求100以内的素数。

100以内的素数是:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97。

所以我认为是这样的,虽然有些偷懒。

public class Test{

public static void main(String[] args) {

int s=1,i;

Systemoutprint("2 ");//请不要在意这里。。。

for (int n=3; n<=100;n+=2){

for (i=3;i2<=n;i++){

if(n%i==0)

break;

}

if(i2>n)

{

s++;

Systemoutprint(n+" ");

}

}

}

}

找出素数的思路是:

循环这10000个数,将每一个数都除以从2到比它小的所有整数,如果能够整除,则不为素数,否者为素数

n在这里是起到一个标志的作用,原值赋为1

当a%m==0时(即有除了1跟其本身的其他因子的时候)

n值就改变为0

以n的值来区分到底要不要输出该值

当n!=0的时候,就是没有执行if语句,说明a为某值的时候,a%m==0一直没有满足,不就是没有因子嘛,

总之

n相当于一个flag

如上所述,不加{}的for的循环体只有后面紧接的一句,

为什么是i/2,就是i的一半(呵呵貌似白说了哈),当i的一半赋给一个整型的数时,或i/2被当成一个整型的数使用时,它一半就是去掉小数后的数(向下取整,比如5的一半,就当是2)

因此,算法大致的意思是这样,一个3到100的数,如果这个数,都不能被2到这个数的一半的数整除的话,就是素数

------------以下是对补充问题的回答------------------------

第一个if,当i能被j(一个2到i一半的整数)整除的时候,跳出for(j=2;j<=i/2;j++){}循环体,当然for(j=2;j<=i/2;j++){}循环体什么也没做,就一个劲的判断,当判断到有的场合时跳出,没有的话,j递增,然后继续循环

直到循环结束都没出现当i能被j(一个2到i一半的整数)整除的场合时,也跳出循环体,而j的值在结束时加1,刚好大过或等于(i的一半加1)。

而i在以上的两种情况跳出的场合,性质是不一样的,第一种是非素数,第二种是素数,所以进行

第二个if,假如for(j=2;j<=i/2;j++){}循环体是在循环还没结束时跳出的,值必定小于(i的一半加1),就什么也不做,反之,是在循环结束时跳出的,那就是素数,就进行打印,

第三个if,没用{}那么只影响下一句,效果就是每6个素数就分别多用一行空行格开,纯粹格式不用在意

当然,如楼上,所说可以用i的平方根代替,可以减少检验次数

可能没说清楚,可能啰嗦了点,呵呵,希望对你有帮助!

-------------------------------对补充的回答

这两天没上网XD,是的,没有自增

import javautilArrayList;

public class TestB {

public static void main(String[] args) {

ArrayList<Integer> prime = new ArrayList<Integer>();

int sum = 0;

for(int i = 2 ; i <= 100 ;i++){//从2开始是因为,1既不是素数也不是合数

boolean sign = true;

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

if(i%j == 0){//能被除了1和自己整除的数肯定不是素数,因此只要有一个就可以跳过循环

sign = false;

continue;

}

}

if(sign){

primeadd(i);

}

}

Systemoutprintln("1~100之间的素数有:");

for (Integer integer : prime) {

Systemoutprint(integer+" ");

sum += integer;

}

Systemoutprintln();

Systemoutprintln("1~100之间的素数和是:"+sum);

}

}

public class PrimeNnmber

{

Systemoutprintln("3——100之间的所有素数 ");

int n=0;

for(int i=3;i<100;i+=2)

{

int k=(int)Mathsqrt(i);

boolean isPrime=true;

for(int j=2;j<=k;j++)

if(i%j==0)isPrime=false;

}

if(isPrime)

{

Systemoutprintf("%4d",i);

n++;

if(n%10==0)Systemoutprintln();

}

}

这是我写过的一个Java程序,看能不能帮到你!希望你能早日解决此问题!

public boolean isPrime(int n){

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

if(n%i == 0)

return false;

}

return true;

}

import javautilScanner;

public class Test40013 {

public static void main(String args[]) {

int ri, repeat;

int i, m, n;

boolean flag;

Scanner in = new Scanner(Systemin);

repeat = innextInt();

for (ri = 1; ri <= repeat; ri++) {

m = innextInt();

/--------------------/

flag = true;

if(m == 1){//1不是素数,要排除

ri--;

continue;

}

for (i = 2; i <= Mathsqrt(m); i++) {

if (m % i == 0) {

flag = false;

break;

}

}

//add ends

if (flag)

Systemoutprintln("YES");

else

Systemoutprintln("NO");

}

}

}

以上就是关于求教JAVA求素数全部的内容,包括:求教JAVA求素数、用JAVA找出1000内素数、JAVA求素数:for(j=2;j<=i/2;j++):是什么意思为什么i/2,为什么没有“{”等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9739832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存