编写一个java程序,用1000个元素的数组确定和显示2~999之间的质数

编写一个java程序,用1000个元素的数组确定和显示2~999之间的质数,第1张

boolean[]

b=new

boolean[1000];//把1也算了进去

for(boolean

h:b){h=true;}

for(int

i=2;i<1000;i=i+1){

if(int

i1=1;i1<=1000;i1=i1+1){

if(i1%i==0&&i1/i>1){//除去1

13/13=0

13/13=1

不会出现

13/1

因为i从2算起

b[i1-1]=false;

}

}

}

boolean f是一个变量,用来标记当前的数是不是质数

如果起一个好的名字,比如boolean isPrimeNum = true;理解起来应该会好一点。

这个程序的思路是:

boolean isPrimeNum = true; //首先假定这个数是质数

然后内层循环,用2 ~ i 作为除数,如果能够整除,则不是质数。

所以设置 isPrimeNum = false; //不是质数

剩下的就不用判断了,使用break提前结束内层 循环。

if(!isPrimeNum) { //isPrimeNum代表“是质数”, 前面加个!否定,即“不是质数”。

continue; // if判断的语义就是,如果不是质数,跳过本次循环。即:不打印输出。

}

1、设计实现:通过for循环输出,使用break跳出。

(1)需求:输出1~100的所有素数。

(2)素数:

--判断条件1:只能被1和本身整除的称为素数。

--判断条件2:在区间(1,x/2)中找不到能整除素数x的整数。

--判断条件3:在区间(1,sqrt(x))中找不到能整除素数x的整数。

(3)完整代码如下:

2、if(b)语句解析:是否是质数的标志,是就输出 。

b的值写在if (n % i == 0){  b = false; }中。这就是质数的判断发发(即如果有能被整除的,则不是质数 ),判断结束后给b赋值,如果为真就通过if语句输出,如果为假则跳过循环(break)。

扩展资料:

java中break函数:用于switch语句当中,用于终止语句。

试验代码如下:

输出:

参考资料:

百度百科--break

/

  0-100:是:101个数字,不是100个;

  0与1,不是质数也不是合数:

  以下代码写的有点冗余:只因为题目要求,布尔数组要参与运算!

  其实一个循环就可以解决的事!

 /

public class Prime {

public static void main(String[] args) {

int arr[]=new int[101],count=0;//元素数组!

boolean[] brr=new boolean[101];//标记数组!

for(int i=0;i<arrlength;i++) //循环复制!

arr[i]=i;

f:for (int i = 0; i<arrlength; i++) {//判断!

if(i<2)continue f;//跳过,0,1;

for(int tem=i;tem--!=2;) 

if(i%tem==0) 

continue f;

brr[i]=true;//标记

}

for (int i = 0; i < brrlength; i++) {//查看!

if(brr[i]!=false) {

count++;

Systemoutprint(arr[i]+" ");

}

}

Systemoutprintln("\r\n0-100质数共:"+count+"个!");

}

}

程序如下,希望有所帮助

public class Prime {

//判断质数

public static void isPrime(int num) {

int j = 2;

for (; j <= Mathsqrt(num); j++) {

if (num % j == 0) {

Systemerrprintln(num + "不是质数!");

return;

}

}

if (j > Mathsqrt(num)) {

Systemerrprintln(num + "是质数!");

return;

}

Systemerrprintln(num + "不是质数!");

return;

}

public static void main(String[] args) {

Scanner sc = new Scanner(Systemin);

Systemerrprintln("请输入数字:");

int num = scnextInt();//接收输入

isPrime(num);//判断是否为质数

}

}

for(int j=2 ; j<i ; j++){//质数是指只能被自身和1整除的数,所以从2开始循环

if(i%j == 0){//i是101开始到200的数,循环的去除以2-小于自身-1的数,例如:101就是除以2,3,4100,在这中间,如果有被整出,那么这个书就不是质数,所以,令f= false

f=false;

break;

}/

我给你一个我回答过的找质数的程序:

public class Test {

public static void main(String[] args) {

//循环1000以内的数

for (int n=2;n<=1000;n++){

//给b初始值true

boolean b = true;

//如果循环拿到的数n不等于1,就进入下面循环

if (n != 1 ){

//i从大于1的第一个数也就是2开始,一次循环到比这个数n本身小的最大的数

//何为质数,除了1和他本身不能再被其他数整除。所以这样循环

for (int i = 2; i < n; i++){

if (n % i == 0){//如果取余为0,也就是除了1和其本身有其他数可以乘除他,所以置为false

b = false;

//跳出当前循环,判断是否打印,并且到外面循环继续

break;

}

}

}

//如果b为true打印下面的质数

if (b){

Systemoutprintln(n + "是质数");

}

}

}

}

所谓质数或称素数,就是一个正整数,除了本身和 1 以外并没有任何其他因子例如 2,3,5,7 是质数,而 4,6,8,9 则不是,后者称为合成数从这个观点可将整数分为两种,一种叫质数,一种叫合成数(有人认为数目字 1 不该称为质数)著名的高斯「唯一分解定理」说,任何一个整数可以写成一串质数相乘的积

(例1) ,, , , , ,这就是说,任何数都由质数构成的

(例2) 2=(1×2),3,5,7,11…均为质数而4,6,8不为质数(因为最少还有因数2)

由於质数本身的奇异性使人无法一把抓住它出现的规律,抓住它出现的特性甚至不知道它实际分布的情形简单来说,给你一个正整数,你竟不可知道它是否是一个质数,即使你用尽了方法,证明它不可能是一个质数,但竟无法分解它,举例来说:211-1=2047 可以分解成 267-1 呢 据说美国代数学家 Frank Neloon Cole花了三年多才发现的自然那时「电脑时代」还未来临,只能靠无限的耐心与毅力,再加上一副长於计算数目的训练才弄得出来但有了电脑似乎好不了多少,数目字加大了,困难依旧1931年 DH Lehmar 证明了 2257-1 是一个大合成数大!不错它等於 231,584,178,474,632,390,847,141,970,017,375,815,706,

539,969,331,281,128,078,915,168,015,826,259,279,871

一个78位数字的大数,到目前仍未有人或电脑能分解它!

因此,虽然知道一个数目是否质数也许没有多大用处,但仍是很有趣味,最少在找它的过程中会引起很多方法论的问题

质数的特性

1质数除了2之外,必为奇数(换句话说,2是最小的质数,也是唯一的偶数)

2「1」不算是质数

3「算术基本定理」:比1大的任何整数,必可分解为质因数的乘积,且表示的方法是唯一的

质数的个数与求法

1欧几里德证明了「质数必有无限个」

2「Eratosthenes」滤套

若要求从2到n的质数,只要检查n是否可被不大於的质数整除即可要判断313是否为质数,则只要检查313是不是可以被小於或等於17的质数整除即可

3质数有没有一种特殊的型式呢

Mersenne质数:型如,若为质数时称之(但质数不一定型如,

例如就非质数)目前已知有3, 7, 31, 127,等38个,还在寻找中…

费玛质数:型如,当n=0到4时(但质数不一定型如,例

如n=5时,非质数)

型如称为「费玛数」,而费玛质数只有3 , 5, 17 , 257 , 65537等五个

4可不可以用一个公式,表示出所有的质数呢

(1)欧拉::在x=0,1,2…40时,可得41个质数

(1)勒真德::在x=0,1,2…28时,可得29个质数

:在x=0,1,2…79时,可得80个质数

:在x=1,2…11000时,可得11000个质数

●但是,没有一个多项式可表示出所有的质数

为什麼要找质数

「既然质数有无限多个,那麼为什麼数学家要投入那麼多的心力一直寻找更大的质数呢 」

简单的说,数学家就和一般人一样,「你有收藏东西的兴趣习惯吗 」「喜欢在比赛中得到名次吗 」这个都是理由之一回答这个问题,可以用几个方向来说明,

一,这是传统!

在西元前300年的欧几里德已经开始这个追求!他在「几何原本」中提及完全数的概念,其中和麦司尼质数产生了关联,开启了研究之门,之后大数学家如费玛,欧拉,麦司尼,笛卡尔…相继投入这个追寻的工作中也就在寻找大的质数的过程中,对基本数论有很大的助益,因此这个寻找的传统值得被继续~

二,它的附加价值!

因为美国的政治上的目的,才有把人送上月球的创举,但是追寻大的质数例如像麦司尼质数,对社会影响的却是持续不断的,它的副加价值在於不断促进科技的进步与人们的日常生活有用的东西材质的研发,也改进教育建设让生活更有生产力在寻找并纪录麦司尼质数的过程中,让老师可以带领学生投入研究,这让学生将研究的精神用於工作上,让工程或科学的得以进步,当然这只是副加价的一部份而已

三,人们喜欢美丽且稀少的物品!

如前文提及欧几里德已经开始这个追求后,它是如此稀少(目前已知有30多个,还在寻找中),不仅如此它也是美丽的;数学上什麼叫作「美丽」 例如人们希望证明是简短,明了,而且可以绐合旧知识让你了解新的东西!而麦司尼质数的型式与证明都合符合上述的要求

四,无上荣耀!

运动选手为什麼不断追不更高,更快,更远呢 难道是希望他们在工作上可以使用这些技巧吗 不是吧,它们都是渴望竞争,为了荣耀(to win)!险峻的峭壁和高山峻岭对於喜欢攀岩,登山的人,有无法抗拒的魅力,数学的探索也是如此,看著无法想像巨大的数字竟是质数时那种心情是相同的,因此继续寻找下一个的渴望,岂是语言可以形容

人们当然需要务实,但是也需要好奇心和不断尝试的精神,才能而不断进步

五,对电脑的考验!

当电脑的发明之后,人们可以藉由电脑的计算去找麦司尼质数,因为检验一个已知的质数都要经过十亿次以上的计算才会计算出来(以电脑来算当然很快),这时候就是测验电脑稳不稳定的好时机,Intel的Pentium处理器,就被Thomas Nicely在计算twin prime constant时,找到有bug存在

六,了解质数分布的情形!

虽然数学不是实验的科学,但是在我们会用例子去检验我们的猜测,当例子愈来愈多时,我们也会更了解事实,而质数的分布情形这是如此,例如高斯在看过质数表之后猜测了质数定理(prime number theorem),这个定理在1896由哈达玛(Hadamard)及普辛(Pouusin)分别证得:

质数是自然数的一部份,有趣的是,它却与自然数的个数一样多,也有无穷多个两千多年前,古希腊数学家就从理论上证明了这一点不过,质数看上去要比自然数少的多有人统计过,在1到1000之间,有168个质数;在1000到2000之间,有135个质数;在2000到3000之间,有127个质数;而在3000到4000之间,就只有120个质数了,越往后,质数就会越稀少那麼,怎样从自然数里把质数给找出来呢 公元前三世纪,古希腊数学家埃拉托塞尼(Eratosthenes)发明了一种很有趣的方法埃拉托塞尼常把数表写在涂了白腊的木板上,遇到需要划去的数,就在那个数的位置刺一个孔;随著合数逐一被划掉,木板上变得千疮百孔,像是一个神奇的筛子,筛掉了合数,留下了质数所以,人们将这种求质数的方法叫做"埃拉托塞尼筛法"

1 我们把1~100的自然数,按照顺序列成一张百数表(如下表)

2 首先把1划掉,因为1既不是质数,也不是合数

3 接下来一个数是2,它是最小的质数,应予保留但2的倍数一定不是质数,应该全部划掉;也就是从2起,每隔1个数就划掉1个数

4 在剩下的数中,3是第一个未被划掉的数,它是个质数,应予保留但3的倍数一定不是质数,应该全部划掉;也就是从3起,每隔2个数就划掉1个数

5 在剩下的数中,4已被划掉了,其余的数,5成为第一个未被划掉的数,它是质数,也应予以保留但5的倍数一定不是质数,应该全部划掉;也就是从5起,每隔4个数就划掉1个数

6仿照步骤1~5,继续划下去,数表上最后剩下的就是1~100之间的质数了

埃拉托塞尼筛法

这种方法是世界上最古老的一种求质数的方法,它的原理很简单,运用起来也很方便现在,凭著经过改进后的埃拉托塞尼筛法,数学家们已把10亿以内的质数全都筛出来了怎样找质数呢 这个问题据说自希腊及中国周朝已有人在问这个难题了下面是一些初步查询

质数是无穷这很早就证明了因若 p1=2, p2=3, pn 是最初 n 个质数,则新数目 必由一个不等於 p1, p2, , pn 中任一个质数的新质数所除尽,故而 pn+1 存在了;且

举例说,

但 30031=59 x 509

证明了 ,不必是质数

考虑

f(n) 形式中是否有无限个质数存在或 f(p) 中是否有无限合成数存在呢

怎样证明 n 是一个质数呢

传统的「筛法」是将任一个数n的可能因子查证,简化后;只要过滤所有小於的质数即可以了就是n若是合成数,必有一个小於的质因数如 3,5,7,11,13,等等目前零碎地查质数的方法固然有,但仍无一万全之方

费马的猜测

17世纪时,有个法国律师叫费马(Fermat,1601-1665),他非常喜欢数学,常常利用业余时间研究高深的数学问题,结果取得了很大的成就,被人称之为"业余数学家之王"费马研究数学时,不喜欢搞证明,喜欢提问题;他凭藉丰富的想像力和深刻的洞察力,提出一系列重要的数学猜想,深刻地影响了数学的发展,他提出的"费马最后定理",几百年来吸引了无数的数学家,直到1994年才由美国普林斯顿大学的怀尔斯得出证明

他在西元1640年提出了一个公式:『 2+1』,他验算了n等於1到4的情况,发现都是质数以后(如下表),就直接猜测只要n是自然数,这个公式求出来的一定是质数」

n

2+1

1

2+1=5(质数)

2

2+1=17(质数)

3

2+1=257(质数)

4

2+1=65537(质数)

1 费马最喜欢的数学分支是数论,他曾深入研究过质数的性质,他发现了一个有趣的现象计算 = 它是一个质数吗

2 那 又是多少呢 它是一个质数吗

3 再下去, 是多少呢 它是一个质数吗

4 最后, 是多少呢 它是一个质数吗

解答:

=5;它是质数

=17;它是质数

=257;它是质数

=65537;它是质数

费马当年并没有继续算下去,他猜测说:只要n是自然数,由这个公式 得出的数一定都是质数;这是一个很有名的猜想,由於n=5之后演算起来很麻烦,很少有人去验证它

1732年,大数学家欧拉认真研究了这个问题,它发现费马只要再往下演算一个自然数,就会发现由这个公式得出的数不全是质数

n=5时,==4294967297,4294967297可以分解为641×6700417,它不是质数也就是说,费马的这个猜想不能成为一个求质数的公式实际上几千年来,数学家们一直在寻找这样的一个公式,一个能求出所有质数的公式;但直到现在,谁也未能找到这样一个公式,而且谁也未能找到证据,说这样的公式就一定不存在;这样的公式存不存在,也就成了一个著名的数学难题

费马在数学史上,是一位非常重要的人物,虽然费马的公式是错误的,但是数学家从另一个方向来寻找大质数,也就是之前讲完全数时提到的:『如果2-1是一个质数,那麼N=2(2-1)一定是个完全数』於是,数学家们努力验算不同的 n值,也找出了一些质数,但是由於数字太大,当时又没有电脑的帮忙,所以很多结果都是错的到了十七世纪,一位法国的天主教修士梅森尼提出了:在 n不大於257的情况下,共有十一个质数虽然他的结果同样有不少错误,但是后人就把『2-1』这种形式的质数叫做『梅森尼质数』」

费马定理

费马一心想要找出一个求质数的公式,结果未能成功人们发现,倒是他无意提出的另一个猜想,对寻找质数很有用处

费马猜测说;如果 是一个质数,那麼,对任何自然数n,( )一定能被 整除这一回费马猜对了,这个猜想被人称作费马小定理例如:11是质数,2是自然数,所以( )一定能被11整除

利用费马定理,这是目前最有效的鉴定质数的方法要判断一个数n是不是质数,首先看它能不能整除( ),如果不能整除,它一定是合数;如果能整除,它就"极可能"是质数现在,在电子计算机上运用这种新方法,要鉴定一个上百位的数是不是质数,一般只要15秒钟就够了

质数公式表

f(x)公式

在100以下令f(x)成合成数的x值

总数

x2-79+1601

80, 81, 84, 89, 96

5

x2+x+41

40,41,44,49, 56, 65, 76,81,82,84,87,89,91,96

14

2x2+29

29, 30, 32, 35, 39,44, 50, 57, 58, 61,63, 65,

25

72,74,76, 84,87, 88, 89,91,92,94,95, 97, 99

6x2+6x+31

29, 30, 31, 34, 36,41,44, 51, 55, 59, 61, 62,

25

64,66, 69,76,80, 84, 86 87, 88, 92, 93, 97, 99

3x2+3x+23

22,23,27, 30, 38,43, 44,45,46,49, 51, 55, 56, 59,

28

62,66,68, 69,70,78, 85, 87, 88, 89, 91,92,95,96

像质数公式 x2+x+41,我们能找到连续 40 个(由 0 到 39)的质数,有没有一条质数公式 f=x2+x+b,能使 (b-1) 个连续 x 值使 f(x) 都是质数呢 有人曾用电算机去找,结果查出如果有,则 b 值一定要超过 1,250,000,000,而且最多只有一个看来这个问题大概解不了

现在的数学家们在质数这个领域里,有两个重要的研究方向:一个是利用各种更有效率的筛法,不断地往更大的数里面去搜寻质数;另外就是寻找新的『梅森尼质数』到西元1996年为止,数学家已经藉由电脑运算,知道1020以内有多少质数了;另一方面,在西元1999年六月,数学家也发现了第三十八个『梅森尼质数』: 26972593-1,这同时也是到目前为止发现的最大质数!它是一个2098960位数

以上就是关于编写一个java程序,用1000个元素的数组确定和显示2~999之间的质数全部的内容,包括:编写一个java程序,用1000个元素的数组确定和显示2~999之间的质数、对JAVA中的布尔常量老是搞不清楚,求指教、Java求100以内的质数的小代码!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10105387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存