题目:
判断101-200之间有多少个素数,并输出所有素数。
程序分析:
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。素数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入素数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找素数的过程(分解质因数)过久,使即使取得信息也会无意义。
算法思路:
1. 初始化一个计数器count,用于记录素数的个数。
2. 使用for循环遍历101-200之间的所有整数,步长为2(因为偶数肯定不是素数,所以只需要检查奇数)。
3. 对于每个整数i,使用一个布尔变量b来表示它是否为素数。初始时,将b设为false。
4. 使用另一个for循环遍历从2到i的平方根之间的所有整数j。这里使用平方根是因为如果一个数n能被a和b整除,那么a和b的最大值不会超过n的平方根。因此只需要判断到n的平方根即可,这样可以提高算法的效率。
5. 在内部循环中,判断i是否能被j整除。如果能整除,说明i不是素数,将b设为false并跳出循环;否则,将b设为true。
6. 在外部循环结束后,判断b的值。如果b为true,说明i是素数,将计数器count加1,并输出i。
7. 最后,输出素数的个数。
源代码:
package Question3;public class SuShu {//题目:判断101-200之间有多少个素数,并输出所有素数。public static void main(String[] args) {int count = 0;for(int i=101; i<200; i+=2){boolean b = false;//这里使用sqrt函数是为了减少循环次数,提高效率。// 因为如果一个数n能被a和b整除,那么a和b的最大值不会超过n的平方根。// 所以只需要判断到n的平方根即可。for(int j=2; j<=Math.sqrt(i); j++){if(i % j == 0){b = false;break;}else{b = true;}}if(b){count ++;System.out.print(i+" ");if(count%5==0)System.out.println();}}System.out.println( "\n素数个数是: " + count);}
}