题目
判断101-200之间有多少个素数,并输出所有素数。
分析
首先考虑素数问题
因为从101开始所以不用考虑1、2的情况,一般情况下需要将1、2单独说明
策略1:一个数n,只需要除到这个数的一半即可,效率比遍历所有要有效率
策略2:首先,排除偶数,不过需要考虑起始数据,其次,n只需要除到sqrt(n)即可
然后是考虑用户输入时的顺序,从小到大,反的话,要做一个互换
package com.practice.java;
/**
* @author CT
* @create 2021-05-27 16:07
* @data 2021/5/27 - 16:07
*/
public class Prime_number {
/**
* 【程序2】
* 题目:判断101-200之间有多少个素数,并输出所有素数。
* 分析:什么是素数,不能被自己和1整除的数。
*/
public static void main(String[] args) {
getNum(101,200);
}
public static boolean isNum1(int n){
/**
*因为从101开始所以不用考虑1、2的情况,一般情况下需要将1、2单独说明
*这个使用的策略是一个数n,除到这个数的一半即可,效率比遍历所有要有效率
*/
boolean flag = true;
for(int i = 2;i<n/2;i++){
if(n%i==0){
flag = false;
break;
}
}
return flag;
}
public static boolean isNum2(int n){
/**
* 策略2:
* 首先,排除偶数,可以从步长搞定,不过需要考虑起始数据
* 其次,n只需要除到sqrt(n)即可
*/
boolean flag = true;
if(n/2!=0){
for(int i = 2;i<=Math.sqrt(n);i++){
if(n%i==0){
flag = false;
break;
}
}
}
return flag;
}
public static void getNum(int a,int b){
int sum = 0;
int c = 0;
if (a <= b) {
for (int i = a;i<b;i++) {
if (isNum2(i)) {
sum += 1;
System.out.print(i+" ");
}
}
System.out.println("\n"+sum);
} else {
c = a;
a = b;
b = c;
for (int j = a;j<b;j++) {
if (isNum2(j)) {
sum += 1;
System.out.print(j+" ");
}
}
System.out.println("\n"+sum);
}
}
}