求质数的算法,越多越好,谁的好分就多

Mars_wx 2003-10-20 10:02:03
条件:两个for循环和%运算符
...全文
168 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
aqining 2003-10-23
  • 打赏
  • 举报
回复
佩服
imagex 2003-10-22
  • 打赏
  • 举报
回复
半秒不到就出来了
imagex 2003-10-22
  • 打赏
  • 举报
回复
//谁说算不到一千个????????
import java.io.*;
public class test{
public static void main(String agrs[]){
int numbers[]=new int[9999];
int compared=0;
for(int i=0;i<9999;i++)
{
numbers[i]=i+2;
}

for(int i=0;i<14;i++)
{
if (numbers[i]!=0)
{
compared=numbers[i];
for(int j=compared;j<9999;j++)
{
if(numbers[j]%compared==0)
{
numbers[j]=0;
}

}
}
}
for(int i=0;i<9999;i++)
{
if(numbers[i]!=0)
{
System.out.println(numbers[i]);
}

}

}
}
queena 2003-10-22
  • 打赏
  • 举报
回复
这些都很慢到位数很大时候都不能算
我曾经听说过用概率来计算的
好像是说得出的数是素数的概率是99.9%
而且可以计算到一千位的
我不是搞数学的,
不过觉得好厉害.
如果谁是搞数论的不妨想想算法我们来一起实现
Mars_wx 2003-10-22
  • 打赏
  • 举报
回复
UP
xwOnlyU 2003-10-22
  • 打赏
  • 举报
回复
for(n=100;n<=200;n++){
for(i=2;n%i!=0;i++){
; //空语句
}
if(n==i)
输出; //所得的n为质数
}
这个是求100--200间质数的核心,其他的自己加好了
kinzey34 2003-10-22
  • 打赏
  • 举报
回复
littlecpu(嘿,哥们,你欠我分,快给咯)的程序怎么改了几次都还是错的?该先自己编译运行试验下再回,我参照他的程序改写如下:

boolean heck(int n)
{
if(n < 2)
return false;
else if(n==2 || n == 3)
return true;
else if(n%2==0) //对于偶数首先排除
return false;
else
{
int mid = (int)Math.sqrt(n);
for(int i=3;i<=mid;i++)
{
if(n % i == 0) return false;
}
return true;
}
}
imagex 2003-10-22
  • 打赏
  • 举报
回复
是啊,上面的我搞错了,
for(int i=0;i<14;i++)
改成这个
for(int i=0;i<40;i++)
就可了
Mars_wx 2003-10-22
  • 打赏
  • 举报
回复
他说的是1000位吧
imagex 2003-10-22
  • 打赏
  • 举报
回复
//谁说算不到一千个????????
import java.io.*;
public class test{
public static void main(String agrs[]){
int numbers[]=new int[9999];
int compared=0;
int howmany=0;
String result="";
for(int i=0;i<9999;i++)
{
numbers[i]=i+2;
}

for(int i=0;i<14;i++)
{
if (numbers[i]!=0)
{
compared=numbers[i];
for(int j=compared;j<9999;j++)
{
if(numbers[j]%compared==0)
{
numbers[j]=0;
}

}
}
}
for(int i=0;i<9999;i++)
{
if(numbers[i]!=0)
{
howmany++;
result=result+" "+String.valueOf(howmany)+"."+String.valueOf(numbers[i]);
}

}
System.out.println(result);

}
}
Mars_wx 2003-10-21
  • 打赏
  • 举报
回复
继续
Mars_wx 2003-10-21
  • 打赏
  • 举报
回复
我自己也一个:求100以内。
public class Priem
{
public static void main(String[] args)
{
boolen flag = true;
for (int i = 2;i < 100; i++)
{
flag = true;
for (int j = 2; j <= (int)Math.sqrt(i); j++)
{
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag)
{
System.out.println("priem = " + i);
}
}
}
}
imagex 2003-10-21
  • 打赏
  • 举报
回复
//虽然也是两个for但比一个for快多了!
import java.io.*;
public class test{
public static void main(String agrs[]){
int numbers[]=new int[99];
int compared=0;
for(int i=0;i<99;i++)
{
numbers[i]=i+2;
}

for(int i=0;i<14;i++)
{
if (numbers[i]!=0)
{
compared=numbers[i];
for(int j=compared;j<99;j++)
{
if(numbers[j]%compared==0)
{
numbers[j]=0;
}

}
}
}
for(int i=0;i<99;i++)
{
if(numbers[i]!=0)
{
System.out.println(numbers[i]);
}

}

}
}
imagex 2003-10-21
  • 打赏
  • 举报
回复
做到7时就已经出来了
imagex 2003-10-21
  • 打赏
  • 举报
回复
计算1-100内的质数:
算法:
1。
先把2-100排成一列
2。
将2-100中能被2整除的去掉形成另一个数列2-99
3。
将2-99中能被3整除的去掉形成另一个数列2-97
4。
将2-97中能被5整除的去掉形成另一个数列2-97
。。。。
是很快的算法


littlecpu 2003-10-20
  • 打赏
  • 举报
回复
不对,应这个

for(int i=2;i<=mid;i++)
{
if(int n % i == 0) return true;
}
return false;
loveyousomuch 2003-10-20
  • 打赏
  • 举报
回复
看看,只用了一个for
import java.io.*;
public class Demo
{
int num;
int j=2;
String s;
BufferedReader br;
boolean flag=false;
public Demo(){
System.out.println("请输入一个整数:");
br=new BufferedReader(new InputStreamReader(System.in));
try
{
s=br.readLine();
num=Integer.parseInt(s);
br.close();
for (int i=2;i<num ;i++ )
{
if (num%i==0)
{
flag=true;
break;
}
}
if (flag==false)
{
//System.out.println(flag);
System.out.println(num+"是质数!");
}
else{
//System.out.println(num+"不是质数");
System.out.println(flag);
}
}
catch (Exception e)
{
System.out.println("输入数字有误或IO异常");
}

}
public static void main(String arge[]){
Demo d=new Demo();
}
}
要是满意就多给点的分啊!!
littlecpu 2003-10-20
  • 打赏
  • 举报
回复
for错了,应这个

for(int i=0;i<mid;i++)
{
if(int n % i == 0) return true;
}
return false;
littlecpu 2003-10-20
  • 打赏
  • 举报
回复
这个好象可找自然对数帮助,快多了,可惜俺不是搞算法的料。

booelan check(int n)
{

if(n < 2)
return false;
if(n==2 || n == 3)
return true;
int mid = (int) java.lang.floor(java.lang.Math.sqrt(n));

for(int i=mid;i<n;i++)
{
if(int n % i == 0) return true;
}
return false;

}
littlecpu 2003-10-20
  • 打赏
  • 举报
回复
booelan check(int n)
{
if(n < 2)
return false;
if(n==2 || n == 3)
return true;
int mid = (int) java.lang.floor(java.lang.Math.sqrt(n));
for(int i=mid;i<n;i++)
{
(int n % i == 0)
}
}

62,614

社区成员

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

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