Java素数求和(1~100)
java素数求和三种方法
一、
public class Sushu {
public static void main(String[] args) {
int sum = 0;
int k = 0;
for (int i = 2; i <= 10; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
k = 0;
if (i % j == 0) {
k = 1;//如果不为素数就赋值为1,否则初始为0
break;//不为素数就结束里面这层for循环
}
}
if (k == 0)//得出素数,这里可以对素数打印、求和
sum += i;
}
System.out.println(sum);
}
}
下面是简单思路
采用了Math.sqrt(i)(判断条件要有等号),java求平方根方法,优化了复杂度,相比与i优化了算法;通过引用k,经过判断当该数为素数时k=0,否则为1;最后将k=0时的数加起来,就是所求素数的和。
说明:我们都知道第一个素数是2,所以就从2开始算,知道了范围就把i定义在某个区间就可以。
二、
public class Sushu {
public static void main(String[] args) {
int sum = 0;
for(int i=2;i<100;i++) {
int j;//声明j使j的作用域为外层for
for(j=2;j<=(i/j);j++) {
if(i%j==0)
break;
}
if(j>(i/j)) {
sum+=i;
//System.out.println(i);//这里原本是用于打印出素数的
}
}
System.out.println(sum);
}
}
下面是简单思路
利用的是j与(i/j)的比较进行判断,复杂度这种方法比第一种复杂一点,因为每次循环都有重新计算(i/j),不过这一点复杂读没有任何的影响哈,优点是没有调用Math.sqrt()函数。
三、
public class Sushu {
public static void main(String[] args) {
int sum = 0;
int i = 2;
while(i<100) {
int j = 2;
while(j<=(i/j)) {
if(i%j==0) break;
j++;
}
if(j>(i/j)) {
sum+=i;
//System.out.println(i);//这里原本也是打印素数的
}
i++;
}
System.out.println(sum);
}
}
第三种方法和第一种一样,不同的是没有用for循环而是用while循环。