首先素数的概念是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。这点要先知道。
(一):
第一个算法的思想的关键是i % j != 0这一句代码,i作为在1-100的所求得素数,j每次循环都要进行初始化,并且j的范围就是2-i,当满足i % j != 0这一句话时,j++,一直循环到*i % j == 0的时候,并判断i和j是否相同,相同的话就是素数,不相同i++继续判断。
package cn.yuan;
public class Demo {
public static void main(String[] args) {
int j;
int sum = 0;
for (int i = 2; i <= 100; i++) // 因为1不是素数,所以直接从2开始循环
{
j = 2;//每次都要对j初始化
while (i % j != 0) {
j++; // 测试2至i的数字是否能被i整除,如不能就自加
}
if (j == i) // 当有被整除的数字时,判断它是不是相同的数字,如果是的话就是素数,进行输出
{
sum += i;
System.out.println(i); // 如果是就打印出数字
}
}
System.out.println(sum);
}
}
(二):
该算法思想的关键是i % n == 0这一句,跟上一个相反,首先要先把j定义为全局变量,将j和i放在了一个循环,该层循环就是遇到i%n!=0的时候,执行j++,当j加到比i小1的时候,再执行一次就会不满足j<i,并退出for循环,此时就会执行if判断i和j是否相等,相等的话就是素数。 当遇到i % j == 0的时候,就会执行break,退出结束for循环,可以直接认为他不是素数。
package cn.yuan;
public class Demo7 {
public static void main(String[] args) {
int j;
int num = 0;
for (int i = 2; i < 100; i++) {
for (j = 2; j < i; j++) {/*该层循环就是遇到i%n!=0的时候,执行j++,当j加到比i小1的时候,再执行一次就会不满足j<i,退出for循环,此时在if语句判断i和j是否相等,相等的话就是素数。那遇到i % j == 0的时候,就会执行break,退出结束for循环,可以直接认为他不是素数。*/
if (i % j == 0) {
System.out.printf("%d:非素数%n", i);
break;
}
}
if (i == j) {
num += i;
System.out.println(i);
}
}
System.out.println(num);
}
}