怎样用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中的所有质数最简便的方法的主要内容,如果未能解决你的问题,请参考以下文章