00001-用穷举法打印1-100的质数,写出完整的程序
2011-11-27 23:57
330 查看
/** 长城信息笔试题 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
证毕.
相关文章推荐
- 写出一个小程序,求出100-200之间的质数的个数并输出这些数
- 打印出100以内的质数,一行显示5个
- Java练习题-编写程序,打印1到100之内的整数,但数字中包含7的要跳过
- C语言打印100以内的质数
- 质数计算打印程序代码
- C语言求解素数(质数)的优化:打印100-200之间的素数
- 使用双重for循环打印100-200之间的质数
- 使用Java程序输出1~100之间 7的倍数的个数及总和,并打印输出
- 用筛选法打印出1到100之间的所有质数
- C#打印程序实现完整文档打印功能
- 简单的算法题,包括1.打印100——200之间的的素数2.输出乘法口诀表3.判断1000年——2000年之间的闰年,给出完整代码
- 打印1~100之间的质数
- Java小程序之100-1000之间的质数
- 简单程序2——打印100~200 之间的素数
- Java 打印1-100的素数(质数)
- 编写一个找出100以内质数的程序
- int a = 10; int b = 20;method(a, b);//需要在method方法被调用之后,仅打印出a=100,b=200,请写出method方法的代码
- C#打印程序实现完整文档打印功能
- 打印100以内质数
- C语言打印100以内的质数