java 中求质数 (素数) 的问题
这篇笔记讲讲关于 java 中质数的问题.
一, 什么是质数(素数)?
定义: 质数又称素数. 一个大于 1 的自然数, 除了 1 和它自身外, 不能被其他自然数整除的数叫做质数; 否则称为合数. 它可以有无限个数.
二, java 习题: 输出 1-100 之内的所有质数
这题有几种解题思路:
第一种思路:
1, 外层循环作为被除数, 内层循环作为除数.
2, 定义一个 Boolean, 标记外层循环数是否为质数. 默认为 true.
3, 内层循环结束, 如果开关还为 true. 即被除数为质数, 打印出来.
代码如下:
classDemo2{
publicstaticvoidmain(Stringargs[]){
//1 既不是质数也不是和数, 使用 i 从 2 开始.
for(inti=2;i<=1000;i++){
booleanflag=true;
for(intj=2;j
if(i%j==0){
flag=false;
break;// 到了 1000 内的质数, 就跳出循环, 并输出结果.
}
}
if(flag){
System.out.print(" "+i);
}
}
}
}
运行效果:
第二种思路:
1, 这个程序用了两层循环, 外层循环列举从 2 到 100 之间的每一个整数(作为被除数), 然后在内层循环中用从 2 到它之之间的数去除它, 如果找到一个能够整除它的数, 内层循环将跳出. 如果一张没找到能够整除它的数, 则当内层循环将 2 到它直接按的所有数都尝试过一遍之后, 内循环也跳出.
2, 等到内层循环跳出之后, 程序接着判断 j 是否大于等于 i, 如果是上面的情况, 表明这个数是质数, 于是将这个数打印出来.classDemo3{
publicstaticvoidmain(Stringargs[]){
inti,j;
for(i=2;i<100;i++){
for(j=2;j
if(i%j==0)
break;
}
if(j>=i){
System.out.print(" "+i);
}
}
}
}
运行效果:
二, java 习题: 输出 0-100 的质数和classDemo3{
publicstaticvoidmain(Stringargs[]){
intsum=0;
intj=2;
// 找出 1-100 的质数之和
for(inti=2;i<=100;i++){// i 值为 2, 质数为除去 1 和自身整除的数 j 初始值为 2 去除偶数
for(j=2;j
if(i%j==0){// 判断当前 i 是否可以整除 k 值
break;// 整除则跳出循环
}
}
// 如果当前内循环没有正常结束 j 与 i 对比不成立
if(j>=i){
sum+=i;// 累计质数和
System.out.println(i);// 输出质数
}
}
System.out.println(sum);// 输出质数之和
}
}