/*
* 问题:得到100以内的所有质数
* */
/*
* 分析:
* 什么是质数?
* 质数就是只能被1和本身整除的数
* 即primenumber%2/3/4……/primenumber-1--------->得到的结果全部不为0
*
* 第一步:假设先得到一个数num,对这个数进行判断
* 第二步:判断这个数是不是质数
* if(primenumber%i){s.o.p();}//i是变化的用for循环
*
* 第三步:
* */
package day06;
public class PrimeNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//int num=9;//假设现在只是在判断7是不是质数
/*
* 因为求的是100以内的所有实数,所以需要改变num的值,
* 用for循环
* */
int count=0;//计数器
System.out.println("100以内的质数分别是:");
for(int num=2;num<=100;num ){
/*
for(int i=2;i<num;i ){
if(num%i==0){//==0为false的时候才不会进入
System.out.println(num "不是质数!");
break;//这是在循环结构中,如果不使用break,会重复打印
}else{
//这里存在着一个问题,就是判断是质素的时候代码只走了一次
//这是不科学的,必须走完2——(sum-1),所以代码需要修正
//当num=9的时候9就被认定是质数,这是错误的
System.out.println(num "是质数!");
break;
}
}
*/
/*
* 代码修正
* */
//针对上面错误代码中else部分并非一次得结果的事实需要使用开关flag
boolean flag = true;//声明开关flag并初始化为true打开表示为是质数
/*
* 循环还可以优化
* Java中提供了一个球平方根的方法,
* 根据经验,只要num对自己的平方根以内的数取余不得0就是质数
* */
//for(int i=2;i<num;i ){
//修改为:
for(int i=2;i<=Math.sqrt(num);i ){
if(num%i==0){
flag=false;//开关关闭判断为不是质数
break;
}
}
if(flag){
//输出还可以优化,因为这样输出太长了,可以优化为每行输出5个数
//需要一个计数器count
count ;//找到一个质数就 1
System.out.print(num "\t");
if(count%5==0){
System.out.println();
}
}
/*
* 不是质素不需要输出,没要求
else{
System.out.print(num "不是质数!" "\t");
}
*/
}
System.out.println("共有质数 " count " 个!");
}
}
运行程序结果演示