什么是素数(质数)?
比1大的整数中,除了1和它本身以外,不再有别的因数,这种整数叫做质数或素数
思想,怎么做才能高效?
要判断X是否为质数,就从2一直尝试到x-1的做法效率是最差的! 其实只要从2一直尝试到√x,就可以了。因为因数都是成对出现的。比如,100的因数有:1和100,2和50,4和25,5和20,10和10。看出来没有?成对的因数,其中一个必然小于等于100的开平方,另一个大于等于100的开平方。
代码实现
效率由高到低
方法一(取平方根,效率高):
package hardCode;
public class 素数_质数 {
public static void main(String[] args) {
boolean flag;
for(int i=2;i<100;i++) {
flag=true; //flag要放在循环里面,每个循环都要重新赋值
for(int j=2;j<=Math.sqrt(i);j++) { //i取根号比除2这样效率高些
if(i%j==0) {
flag=false;
break;
}
}
if(flag) {
System.out.println(i+" ");
}
}
}
}
package hardCode;
public class 素数_质数 {
public static void main(String[] args) {
//输出100以内的素数
int i=0;
int j=0;
for(i=1;i<=100;i++) {
for(j=2;j<=(int)Math.sqrt(i);j++) {
if(i%j==0) { //如果i可以与某个小于自身又不等于1的数整除
break; //那么跳出循环
}
}
if(j>(int)Math.sqrt(i)) {
System.out.println(i);
}
}
}
}
方法二( /2 效率一般):
package hardCode;
public class 素数_质数 {
public static void main(String[] args) {
boolean flag;
for(int i=2;i<100;i++) {
flag=true; //flag要放在循环里面,每个循环都要重新赋值
for(int j=2;j<i/2;j++) { //i除了2这样效率高些
if(i%j==0) {
flag=false;
break;
}
}
if(flag) {
System.out.println(i+" ");
}
}
}
}
方法三(效率最低):
package hardCode;
public class 素数_质数 {
public static void main(String[] args) {
boolean flag;
for(int i=2;i<100;i++) {
flag=true; //flag要放在循环里面,每个循环都要重新赋值
for(int j=2;j<i;j++) {
if(i%j==0) {
flag=false;
break;
}
}
if(flag) {
System.out.println(i+" ");
}
}
}
}