扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
public class Test{
你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站制作、成都网站建设、企业网站建设、手机网站开发、网页设计、成都品牌网站建设、网页制作、做网站、建网站。成都创新互联公司拥有实力坚强的技术研发团队及素养的视觉设计专才。
public static void main(String []arg){
prime(100);
}
// 什么是质数,合数,约数?
// “素数”,又称“质数”,是指:
// 除1和其自身之外,没有其它约数的正整数
// 如 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,...
// 2是最小的质数,也是唯一的偶质数
// 质数有无数多个
// 与素数相对的,有“合数”:
// 除1和其自身之外,仍有其它约数的正整数
// 规定:1和0既不是质数,也不是合数
// 一个数除了1和它本身不再有别的约数,
// 这样的数叫做质数,也叫素数。20以内
// 的质数有:2、3、5、7、11、13、17、19
// 一个数除了1和它本身还有别的约数,这样
// 的数叫做合数。1和0不是质数也不是合数。20
// 以内的合数有:4、6、8、9、10、12、14、15、16、18、20。
// 数a能被数b整除,a就是b的倍数,b就是a的约数。例如:15÷5=3,
// 那么15是5的倍数,5是15的约数。约数与倍数是相互的,
// 不能单独说15是倍数,5是约数。在讨论质数、合数、约数、
// 倍数都指自然数(0除外)。
public int prime(int num) {// 能求无限大的质数//但如果所求的范围太大,计算的时间需要很久
long is = System.currentTimeMillis();
int n, m, i = 0;
label1: for (n = 2; n = num; n++) {
for (m = 2; m = n / 2; m++) {
if (n % m == 0)
continue label1;
}
i++;
// System.out.println("第" + i + "个素数是:" + n);
}
long ie = System.currentTimeMillis();
System.out.println("time=" + (ie - is));
return i;
}}
一般的求素数算法:
1234567891011121314151617181920212223242526
publicclassPrime
{
/*
*
* 一般求素数方法
*
* @param args
*/
publicstaticvoidmain(String[]args){for(inti=2; i100; i++)
{intj;for(j=2; j(int)(Math.sqrt(i)+1); j++)
{if(i%j==0){break;}} if(j(int)Math.sqrt(i)){System.out.print(i+" ");}} } }
筛法求素数:
12345678910111213141516171819202122232425262728293031
publicclassPrime2
{
/*
*
* 筛法求素数
*
* @param args
*/publicstaticvoidmain(String[]args)
{// TODO Auto-generated method stubintn=100;int[]array=newint[n];for(inti=2; i{if(array[i]!=0)
{intj, temp;}}}
public class Test {
public static void main(String[] args) {
int i, count = 0;
for(i=2; i=100; i++){
if(isPrimeNumber(i) == true){
count++;
System.out.printf("%6d", i);
if(count%5 == 0){
System.out.println();
}
}
}
//判断一个数是否是素数,若是,返回true,否则返回false
public static boolean isPrimeNumber(int num){
int k = (int) Math.sqrt(num);
if(num == 2){
return true;
for(int i=2; i=k; i++)
if(num%i == 0)
return false;
return true;
}
}
扩展:
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
质数的个数是无穷的。欧几里得的《几何原本》中有一个经典的证明。它使用了证明常用的方法:反证法。具体证明如下:假设质数只有有限的n个,从小到大依次排列为p1,p2,……,pn,设N=p1×p2×……×pn,那么,
是素数或者不是素数。
如果
为素数,则
要大于p1,p2,……,pn,所以它不在那些假设的素数集合中。
如果 为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以不可能被p1,p2,……,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。
其他数学家给出了一些不同的证明。欧拉利用黎曼函数证明了全部素数的倒数之和是发散的,恩斯特·库默的证明更为简洁,哈里·弗斯滕伯格则用拓扑学加以证明。
楼主的程序略有误,下为修改后的代码
public class Test {
public static void main(String[] args) {
int i =1,j =2;
for(i=1;i=100;i++) {
for(j=2;j=i;j++){
//素数是指除了1和自身外不能被任何数整除的数
//因此遍历每一个小于i大于2的整数j
if(i%j==0)
//如果i能够被j整除
if(i==j)
//如果当i等于j的时候则满足i是素数的条件,即只能被1(
//j是从2计数的)和自身整除,因此i是素数
System.out.println(i +"是素数");
else
//在如果存在一个小于i大于2的整数j可以整除i,则i必不是
//素数,因此break操作.
break;//如果i可以被j整除且j不等于i,则跳出循环
}
}
}
}
亲测可用..
输出前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;
}
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流