首页 > 代码库 > 2 质数求解
2 质数求解
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数.
思路分析:
这里需要进行两个求解:
第一个是求解素数的个数,第二个是打印这些素数的.
(1) 在101-200之间限定了范围是在101-200之间的数,要判断在这个区间的数,需要判断这区间的每一个数,所以需要遍历,在计算机中,遍历就是做一个或多个for循环操作
所以判断101-200区间数,就写为
for(int i=101;i<=200;i+=2)
{
}
这里定义一个变量i,因为是从101开始的,所以初始值设置为101,到200,就是小于等于200,因为是质数,每次都是增加2,所以写作i+=2,就是i=i+2
(2)判断一个数是素数,就是数学中的质数,质数就是除了1和它本身没有其他因数的数,举例5=1*5,所以5的因数就是1和5,所以5是素数,而6=2*3.6=1*6,6的因数就有1,2,3,6,这就是四个,它就不是素数.
根据以上描述可得,素数的数,都是可以跟自己整除的数,所以运用取莫运算,因为取莫运算可以得到0和1,0和1可以判断真假,从而得出是否为质数,
可以用101到200之间的数,分别除以一个数,得1的就是质数,得0的就是其他数,这样一直判断下去,这样就又形成一个判断区间,就是多次取莫
因为最小的质数是2,所以从2开始,到根号200结束,每次加一
2~√200 区间(至于为什么是√200,可以百度一下,为什么素数需要根号判断,这是一个数学问题,请问数学老师)这里只说,可以提高效率
得到循环
for(int j =2;j<=√200;j++){
if(i%j==0){
}
(3)判断是质数,设置一个计数器命名count=0,随着每次增加count增加
if(是质数){
count++;
}
思路就是如此,我这里用了集合,最后数值放入一个集合中显示,如果还是不清楚,代码复制入编译器,然后run一下.
1 @SuppressWarnings({"unchecked","rawtypes"}) 2 public class _002101_200PrimeNumber { 3 4 public static void main(String[] args) { 5 countZhiShu(); 6 } 7 8 private static void countZhiShu() { 9 // 计算变量 10 int count = 0; 11 12 // 集合,用来装所有的素数 13 Vector v = new Vector(); 14 for (int i = 101; i <= 200; i+=2) { 15 // 判断依据 16 boolean b = false; 17 for (int j = 2; j < Math.sqrt(i); j++) { 18 // 求余数是否为0 19 if (i % j == 0) { 20 // 如果为0, 将标签设置为false 21 b = false; 22 // 可以整除就跳出这个循环 23 break; 24 } else { 25 b = true; 26 } 27 } 28 if (b == true) { 29 // 素数个数加1 30 count++; 31 // 将符合要求的i加到集合里 32 v.add(i); 33 } 34 } 35 System.out.println("100到200中间有 " + count + " 个素数"); 36 System.out.println("素数为:\n" + v); 37 } 38 }
2 质数求解