int n= Math.sqrt(200);//求200以内的质数for(int i=1<;i<=n;i++)
{
if(isPrime[i])//boolean类型的数组 大小等于200 如果其下标值是质数的话者该下标对应的值为true 反之为false
{
for(int j=i*2;j<=200;j+=i)
isPrime[j]=false;
}
}学校12点断网了 明天有答案的就结贴给分
{
if(isPrime[i])//boolean类型的数组 大小等于200 如果其下标值是质数的话者该下标对应的值为true 反之为false
{
for(int j=i*2;j<=200;j+=i)
isPrime[j]=false;
}
}学校12点断网了 明天有答案的就结贴给分
解决方案 »
- JAVA怎么创建32位BMP的图片????
- 请教!JNI错误。
- 一个start()的问题。。
- 启动realplayer播放rmvb文件
- 如何用java实现web的数据挖掘,请大家进来给点意见。
- 如何在Panel放置上百个component?
- 有哪位高手能解释一下System.in.read中的in是怎么工作的?
- Java写入Excel数据失败
- 急,如何对已经打开的窗口进行遍历,然后关闭特定的窗口!!
- 望介绍几本好书(一定给分!)
- 咨询一问题:httpclient 多线程如何监控页面是否改变呢?
- .门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?
所以,对于每一个小于200的平方根的数,将它的2倍,3倍直至N倍都设置为不是质数。这样遍历一次之后,剩下没被设置过到的就是质数
当然,这段程序是有小Bug的,按照这个思路,正确的能跑出结果的代码如下:
int n= (int)Math.sqrt(200);//求200以内的质数
boolean[] isPrime = new boolean[201]; for (int i=0; i<201; i++) {
isPrime[i] = true;
}
for(int i=2;i<=n;i++)
{
//if(isPrime[i])//boolean类型的数组 大小等于200 如果其下标值是质数的话者该下标对应的值为true 反之为false
for(int j=i*2;j<=200;j+=i)
isPrime[j]=false;
}
for (int i=0; i<200; i++) {
if (isPrime[i]) System.out.println(i);
}
还有个素数筛法时间复杂度能达到O(n)的
楼主可以自己搜下
主要思想就是合数都能分解成素数乘积
所以在小素数被求出来的时候可以组合成大些的合数将其pass掉