【发布时间】:2019-01-06 21:54:58
【问题描述】:
所以我试图在 Java 中实现 Eratosthenes 的分段筛,这是我能做的最好的。当我运行它时,它没有给出任何错误,但它没有返回任何内容,尽管我在最后添加了“System.out.println”以打印出所有剩余的素数。提前感谢您的建议
public class SegmentedSieveofEratosthenes {
public static void main(String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
boolean[] v = new boolean[1000000];
int[] primes = new int[1000000];
//counter for the primes vector
int counter = 0;
for(int i=2;i<=(int)Math.sqrt(m);i++)
{
v[i]=true;
}
for(int i=2;i<=(int)Math.sqrt(m);i++)
{
if(v[i]=true)
{
primes[counter]=i;
counter=counter+1;
for(int j=i+1;j<=(int)Math.sqrt(m);j++)
{
if(j%i==0)
{
v[j]=false;
}
}
}
}
boolean[] flags = new boolean[1000000];
for(int i=n;i<=m;i++)
{
flags[i]=true;
}
for(int i=0;i<counter;i++)
{
int start = (n/primes[i])*3;
for(int j=start+i;j<=m;j=j+i)
flags[j]=false;
}
for(int i=n;i<=m;i++)
if(flags[i]==true)
System.out.println(i);
in.close();
}
}
【问题讨论】:
-
只是评论:选择花括号样式。同一行 curly 和 next line curly 的社区不相处。这种同时使用两者的方式会引发一场你从未见过的战争。
-
@PaulNikonowicz 哦,好的,谢谢!