这是使用素数筛法做的输出素数的java程序,不知道哪里错了,请大家帮我看一下。如果还有什么可以优化的地方,请一并踢出来啊,呵呵

sofe 2012-03-14 12:23:56
public class Prime {

public static int main(String[] args) {

//Scanner input = new Scanner(System.in);
//System.out.print("\n请输入判断的值: ");
//int result = input.nextInt();

boolean prime[]=new boolean[31];//[result+1];
int i,j;

for( i=2;i<30;i++)
{
if(i%2==0)
prime[i]=true;
else
prime[i]=false;
}
for(i=3;i<Math.sqrt(30);i+=2){
if(prime[i])
for(j=i+i;j<=30;j+=i)
prime[j]=false;

//System.out.print(i);
}
for(i=2; i<=30; i++)
{if(prime[i])
System.out.print(i+"\t");
}
return 0;
}
}
...全文
214 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiakai0419 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wutong_123 的回复:]

回复3楼:嗯嗯!showPrime()函数输出时从3开始输出,呵呵。谢谢啦
[/Quote]

你自己看看那代码,素数都求出来了。你想怎么输出怎么输出。

自己写个符合你自己需求的方法就行。

pt[]数组里面 pt[i]为false的i为素数。
GIS的粉刷匠 2012-03-16
  • 打赏
  • 举报
回复
谁有比这更简单的
label: for(int i=2;i<=30;i++)
{
for(int j=2;j<i;j++)
{
if(i%j==0)
{
continue label;
}
}
System.out.println(i);
}
hnu_0720 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wutong_123 的回复:]

回复一楼:for(i = 2;i<=n;i++ ) a[i] = true;这一句是把数组里的元素都改成true状态吗?我把i++改为i+=2,结果就错了,我的理解是:先把偶数的赋值为true。
还有count = 0;是什么意思呢?
[/Quote]
先假设全部都是素数,然后在用筛法筛掉素数的倍数.
count = 0 ;//多谢了一句 忘记去掉了
如果要改成i+=2 应该先把所有的奇数弄成true,偶数肯定不是素数啊.
还有一个二次筛法 好像是最快的筛法了.你可以自己百度一下.
yupdog 2012-03-14
  • 打赏
  • 举报
回复
Math.sqrt(30);放到循环外面计算
sofe 2012-03-14
  • 打赏
  • 举报
回复
回复3楼:嗯嗯!showPrime()函数输出时从3开始输出,呵呵。谢谢啦
sofe 2012-03-14
  • 打赏
  • 举报
回复
回复一楼:for(i = 2;i<=n;i++ ) a[i] = true;这一句是把数组里的元素都改成true状态吗?我把i++改为i+=2,结果就错了,我的理解是:先把偶数的赋值为true。
还有count = 0;是什么意思呢?
jiakai0419 2012-03-14
  • 打赏
  • 举报
回复


public class Prime {
private final static int n = Integer.MAX_VALUE/100;
private final static boolean[] pt = new boolean[n];
public Prime(){
pt[0] = true;
pt[1] = true;
for(int i = 2; i*i < n; i++){
if ( !pt[i]) {
for (int j = i; i*j < n; j++){
if (!pt[i*j]){
pt[i*j] = true;
}
}
}
}
}
public void showPrimes(int n){ //输出 [1,n]中所有的素数
for(int i = 2; i <= n; i++){
if(!pt[i]){
System.out.print(i+" ");
}
}
System.out.println();
}
public static void main(String[] args){
Prime p = new Prime();
p.showPrimes(100);
}
}




闲来无事,给你写了一个。

hnu_0720 2012-03-14
  • 打赏
  • 举报
回复
LZ的代码 这里有问题
for( i=2;i<30;i++)
{
if(i%2==0)
prime[i]=true; //能被2整数 说明不是素数
else
prime[i]=false;
}
应该改成这样
prime[2] = true;
for( i=3;i<30;i++)
{
if(i%2==0)
prime[i]=false;
else
prime[i]=true;
}
hnu_0720 2012-03-14
  • 打赏
  • 举报
回复
LZ的代码有点问题 .
我写了一个 速度来说不是最快的一个.
public class prime {
public static void sieve (int n)
{
int count = (int)Math.sqrt(n);
int i,k;
boolean[] a = new boolean[n+1];
for(i = 2;i<=n;i++ ) a[i] = true;
for(i = 2;i<=count;i++)
if ( a[i] ) //i是素数 那么将i的倍数都筛掉
for ( k = i*i; k <= n; k+= i) {
a[k] = false;
}
count = 0;
for (i = 2;i <=n;i++)
if (a[i]) System.out.print(i+"->");
}

public static void main(String[] args) {
sieve(100);

}

}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧