java求素数
首先楼主应该对素数的定义已经清楚了吧?其实就是一个数,如果存在1和它本身以外,有数能整除它,这个数就不是素数.
创新互联建站公司2013年成立,先为怀远等服务建站,怀远等地企业,进行企业商务咨询服务。为怀远企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
在这里,有2个关键的变量,我估计解释一下你就能看得明白这个算法了.
1.关于变量k.变量k的作用是优化整个算法,因为比如要判断一个数13是不是素数,我们没必要从2循环到13.只要循环到对13开根号.13开根号大概是3.6多,强转为int类型后是3.也就是说只要检查2,3是否能整除13.如果不能,13肯定是一个素数.因为比如48这个数,你前面检测到被4整除等于12,那么继续循环超过Math.sqrt(48)的话,无非就是得到一个反过来的被12除等于4的结果.这个没有必要.
2.关于变量j.注意点1:j是在最外层的循环体中定义的.这个时候刚定义完,j的值是初始的0.然后j从2开始,一直到小于等于k结束.这里是控制尝试整除的循环次数.一旦发现在这个范围内有数能整除i,那么就跳出循环.
所以,对于你不理解的那个部分,首先确定一点,程序只要执行到break,就说明这个数是素数.
例如我们这次k = 10,那么是要从j = 2到10逐一检测 i 是不是能被 j 整除.当j = 7的时候比如可以整除了,就跳出当前内层循环了.这时候, j 显然是不大于 k 的,因为只要是中途跳出,因为内层循环(j = 2; j = k; j++)的控制,只要在循环过程中跳出来的,那么j 肯定 = k.
只有循环到j = 10依然没有break的话,根据for循环的执行顺序,会执行j++,然后去判断j = k 是否为true,为true则继续下一次循环,否则循环结束.而在这里,如果到10还没有能够整除的话,j是会在10的基础上自增的.这时候j就=11了.
那么if ( j k )就不成立了,则i 不会被输出.
总结一点:就是如果中途or最后一次循环,找到能整除的数了,那么因为break的关系,最后就不会执行 j++, 所以j k (亦即j = k 的取反)表示没有找到能整除的数.其实j最大也就只能等于k+1.
另外,,你也可以自己修改修改,来加深理解.例如
boolean isPrime; //定义布尔变量判断是否素数.是:true;否:false
for (int i = 3; i = 100; i++) {
isPrime = true;
int k = (int) Math.sqrt(i);
for (int j = 2; j = k; j++) {
if (i % j == 0) {
isPrime = false; //如果能够有数整除i,那么就不是素数.
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
这样就没有必要在外层循环里就定义j这个变量了.如果我上面说的你理解还是比较困难,可以先理解用布尔变量来控制的写法.这个理解了,用j k 判断的就也很容易理解了.
java求素数代码
输出前500个素数
其中
for
(int
i
=
2;
i
=
math.sqrt(k);
i++)
从2开始,1不用比较,如果还有另外一个不是他本身的数可以整除他,那他就不是素数
math.sqrt(k)
是原先一个人提出的算法,加大效率的,你可以测试看看
已经按照你的要求用到了while和if
else
下面的朋友···别人说要用什么写就用什么写···有时候按要求去就好了
class
a
{
public
static
void
main(string
arg[])
{
int
num
=
0;
int
k=2;
while
(num
500)
{
if
(isprime(k))
{
system.out.print(k
+
"
");
num++;
}
k++;
}
}
public
static
boolean
isprime(int
k)
{
if
(k
==
2)
return
true;
else
if
(k
%
2
==
0)
return
false;
else
{
for
(int
i
=
2;
i
=
math.sqrt(k);
i++)
if
(k
%
i
==
0)
return
false;
return
true;
}
}
}
JAVA素数算法
我给你个算法,言简意赅
int n = 23;//所求素数范围(0-n以内)
int j = 1;
for (int i = 2; i n; i++) {
for (j = 2; j i; j++) {
if (i % j == 0)
break;
}
if (j = i) {
System.out.println(i);
}
}
设计JAVA application程序,计算出20000000~300000000之间所有的素数?
为了实现一个Java应用程序,用于计算20000000~300000000之间所有的素数,可以按照以下步骤来实现:
定义一个Java类,用于表示计算素数的应用程序。例如,可以定义一个PrimeNumberCalculator类,它包括一个静态的calculate方法,用来计算并打印出20000000~300000000之间所有的素数。
在calculate方法中,使用for循环来遍历20000000~300000000之间的所有整数,并使用素数判定的算法来判断每个整数是否为素数。例如,可以使用埃氏筛法来判定素数。
在判定素数的过程中,可以使用Java的并发编程功能来提升计算性能。例如,可以使用Executor框架来创建多个线程,每个线程负责计算一部分整数是否为素数,最终在主线程中汇总结果并打印出来。
在计算完成后,可以在主函数中调用PrimeNumberCalculator类的calculate方法,来启动应用程序。
分享标题:java素数计算代码 java求素数和的代码
网页链接:http://scgulin.cn/article/dogjgos.html