题目:判断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=15,所以5的因数就是1和5,所以5是素数,而6=23.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一下.
@SuppressWarnings( { "unchecked", "rawtypes" })
public class _002101_200PrimeNumber
{
public static void main(String[] args)
{
countZhiShu();
}
private static void countZhiShu()
{
// 计算变量
int count = 0;
// 集合,用来装所有的素数
Vector v = new Vector();
for(int i = 101; i <= 200; i += 2)
{
// 判断依据
boolean b = false;
for(int j = 2; j < Math.sqrt(i); j++)
{
// 求余数是否为0
if(i % j == 0)
{
// 如果为0, 将标签设置为false
b = false;
// 可以整除就跳出这个循环
break;
}
else
{
b = true;
}
}
if(b == true)
{
// 素数个数加1
count++;
// 将符合要求的i加到集合里
v.add(i);
}
}
System.out.println("100到200中间有 " + count + " 个素数");
System.out.println("素数为:\n" + v);
}
}