00001-用穷举法打印1-100的质数,写出完整的程序

/** 长城信息笔试题 2011.11.24
 *  用穷举法打印1-100的质数,写出完整的程序
 *  注1:求质数算法中的循环条件 i < (int) Math.sqrt(n) 为什么是n的平方根呢?
 *       利用的是一个定理:如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。
 *  注2:Java中的if() 中只判断boolean类型,boolean类型与c/c++中的bool类型不一样,boolean只有false和true,
 *       且正整数不表示true,0不表示false
 *  Made by zs,on Num 27th,2011    
 */

public class TestPrintPrime {
	public static void main(String args[]){
		int count=0;
		for (int i = 1; i <=100; i+=2) {
			if (Prime(i)) {
				System.out.println(i);
				count++;
			}	
		}
		System.out.println("1-100的质数一共有"+count+"个");
		
	}
	public static boolean Prime(int n) {
		if (n < 2) return false;
		if (n == 2) return true;
		for (int i = 2; i < (int) Math.sqrt(n); i++) {
			if (0 == n % i) return false;
		}
		return true;

	}
}

 

定理: 如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根.

比如,50,它的最小质因数是2,它的平方根是7.07xxx,2<=7.07xxx。大家可以多找几个合数试一下。也可以用反证法证明。


   设a = bq,因为a是合数,则b和q都是大于1的整数.       
   又设q是a的最小质因数,即b>=q.       
   如果q<=根号a   不成立,则必有 q>根号a,此时更有b > 根号a,于是     
   a = bq > 根号a·根号a =   a      
   出现矛盾,故q <=根号a       
   证毕.  


 

你可能感兴趣的:(编程小题,string,class,算法,java)