具我了解最小的素数是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,为什么没有“{”等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)