TestSix 二
2016-11-28 本文已影响10人
实在想不出昵称丶

//对素数的探索
/**
*一般的,嵌套两层循环,内层用来探测,外侧用来输出
*对于探测:
*素数:除1和它本身外,不会被其他数整除,以下方法,第二种高效
*1. 用小于 该数开方值 的数整除他,若不能整除(余数不等于0) ,-->素数
*2. 将素数筛选出去 高效
* 定义一个bool类数组,将下标为奇数的定为true
* 依次剔除素数的倍数
*3. 只是将判断转变为方法,然后调用
*/
//1.
public class TestSix03{
public static void main(String[] args){
int n=100;
int j;
for (int i=2;i<n;i++){//第一种
for(j=2;j<=Math.sqrt(i);j++){
if(i%j==0){
break;
}
}
if(j>Math.sqrt(i))
System.out.print(" "+i);
}
}
}
//2.
public class TestSix02{
public static void main(String[] args){
int n=100;
boolean[] prime=new boolean[n];
for(int i=2;i<n;i++){
prime[i]=true;
}
for(int i=2;i<Math.sqrt(n);i++){
if(prime[i])
for(int j=i+i;j<n;j+=i)
prime[j]=false;
}
for(int i=2;i<100;i++)
if(prime[i])
System.out.print(" "+i);
}
}
//3.
public class TestSix01{
public static void main(String[] args){
int n=100;
for (int i=2;i<n;i++){//第一种
if(isprime(i)){
System.out.print(" "+i);
}
}
}
public static boolean isprime(int i){
for(int j=2;j<=Math.sqrt(i);j++){
if(i%j==0){
return false;
}
}
return true;
}
}
思考:
最初只是写了第三种,然后对与第一种后面的
if(j>Math.sqrt(i))
System.out.print(" "+i);
没有想清楚,直接写成 System.out.print(i) 了,
对于第二种高效率的写法,若从3开始,将所有的偶数下标设置为false,应该更好!!
***作业好多,不玩了。
**** 清醒小刻 ****
*** 没错,我说的都是错的 ***