怎样用Java求1~10000中的所有质数最简便的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用Java求1~10000中的所有质数最简便的方法相关的知识,希望对你有一定的参考价值。

运用java8新特性stream来解决

参考以下代码

/**
 * IntStream.range(1,10001) :获取一个stream,是从1-10000的
 * filter: 取出stream每个数字进行过滤,比如选取数字300,则再构造一个stream,从2-299,依次用300取余2-299中的数,若有一个是整除,余数为0的话,这个数字就不是我们要找的质数,跳过
 * forEach:打印经过filter过滤后的stream中的每个数
 */
IntStream.range(1,10001).filter(outerInt-> !IntStream.range(2,outerInt).anyMatch(innerInt->outerInt%innerInt==0))
                        .forEach(System.out::println);

参考技术A public class Sushu
public static void main(String []args)

boolean flag;
int a=1;
System.out.print("1到10000的素数有:");
for(int i=1;i<10000;i++)

flag=true;
// 用1到10000的数来除以自己的平方根,
// 如果能除尽的话就不是素数
for(int j=2;j<Math.sqrt(i);j++)

if(i%j==0)

flag=false;
break;


//如果是素数的话flag=true;以下的是每行
//输出10个数
if(flag)

if(a%10==0)
System.out.println();
System.out.print(i+" ");
a++;




参考技术B 上楼的程序有误,运行结果不正确,你可以运行看看,下面是我将他的程序修改了之后的,我经过调试的,完全正确。

for(int j=2;j<i/2;j++) //这里是我修改的,将他的程序Math.sqrt(i)修改为i/2;

你可以分别将这两个程序运行一下,他上面程序运行的结果里有好多数不是素数,你可以验证验证。
参考技术C public class Primary
public static void main(String[] args)
int i=0;
for(i=2;i<=10000;i++)
if(getPrimary(i)==true)
System.out.print(i+" ");




public static boolean getPrimary(int i)
int max=i/2+1;
for(int n=2;n<max;n++)
if(i%n==0)
return false;


return true;

51Nod - 1181 质数中的质数(质数筛法)

如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。

 

Input输入一个数N(N <= 10^6)Output输出>=N的最小的质数中的质数。Sample Input

20

Sample Output

31

用eular质数筛即可

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 
 7 using namespace std;
 8 char isprime[10000005];
 9 int primelist[10000005];
10 
11 int Eular(int n)
12 {
13     int cnt=0,x;
14     memset(isprime,1,sizeof(isprime));
15     int i=2;
16     while(x<n)
17     {
18         if(isprime[i])
19         {
20             cnt++;
21             primelist[cnt]=i;
22             if(isprime[cnt])
23                 x=i;
24         }
25         for(int j=1;j<=cnt&&i*primelist[j]<=1e7;j++)
26         {
27             isprime[i*primelist[j]]=0;
28             if(i%primelist[j]==0)
29                 break;
30         }
31         i++;
32     }
33     return x;
34 }
35 
36 int main()
37 {
38     int n;
39     while(~scanf("%d",&n))
40     {
41         printf("%d\n",Eular(n));
42     }
43     
44     
45     return 0;
46 }

 

以上是关于怎样用Java求1~10000中的所有质数最简便的方法的主要内容,如果未能解决你的问题,请参考以下文章

求100以内的所有质数(素数) 要求:用VB的for语句写

AcWing 196. 质数距离 二次筛法

求大神,c语言怎么用for循环语句输出1到100的所有质数,我这么做结果出来的是2到100的所有数

java基础实例用if和for求输入的数是否为质数

Java求100以内的质数的四种方法

查找10000以内的质数