当前位置:首页 » 编程软件 » 编程无穷素数

编程无穷素数

发布时间: 2022-04-27 01:15:20

A. c语言 求100—200之间的全部素数,并且输出每10个换一行

第一个问题的分析:如果满足i<=k,则说明这个数不是素数,则不用输出,不执行下面的printf的函数,只有满足i>=k+1(其实是满足1=k+1),才能判断此数为素数,则输出。所以程序是正确的。

第二个问题的分析:两个程序的最终结果是一样的,都是正确的。

程序自然结束后,会有i==k+1,此时是素数,打印数字;而如果是break出循环,则假设不成立,为合数,不打印字符,执行下一次循环。

(1)编程无穷素数扩展阅读:

如果 为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以不可能被p1,p2,……,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。

B. 怎么证明有无穷个素数

反证法,
假设素数有有限多个,分别为a1,a2,……an
则构造一个数a(n+1)=(a1*a2*……*an)+1
这个数不是任何一个素数的倍数,所以为素数,矛盾
得证

C. 如何证明素数又无穷多个

假设素数只有有限个,记为p1,p2,……,pn。考虑这个数(p1p2……pn)+1=a,则a为合数,故必有素因子q。由于只有有限个素数,q必是上述n个素数中的一个。但是,a除以上述n个素数中的任何一个都余1,这与n是q的倍数矛盾!

所以,素数有无穷多个

D. C语言求100以内素数的问题

#include<stdio.h>

int main()

{

int i=0;

int count=0;

for(i=0;i<=100;i++)

{

int j=0;

for(j=2;j<=i;j++)

{

if(i%j==0)

{

break;

}

}

if(i==j)

{

count++;

printf("%d ",i);

}

}

printf(" count=%d ",count);

return 0;

}

解题思路:

素数,就是除了1和他本身,不能被其他数整除的数字。答案就是用100到200之间的每个数字,除以2到其本身前面的那一个数字,如果此过程中出现整除的现象,则该数不是素数。如果没有整除的现象,则该数为素数输出。

(4)编程无穷素数扩展阅读:

质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。

质数的个数是无穷的。欧几里得的《几何原本》中有一个经典的证明。它使用了证明常用的方法:反证法。具体证明如下:假设质数只有有限的n个,从小到大依次排列为p1,p2,……,pn,设N=p1×p2×……×pn,那么,要大于p1,p2,……,pn,所以它不在那些假设的素数集合中。

E. 如何证明素数个数是无穷的(详细过程)

(反证) 假设素数是有限的,假设素数只有有限的n个,最大的一个素数是p 设q为所有素数之积加上1,那么,q = ( 2 * 3 * 5 * …… * p )+ 1不是素数 那么,q可以被2、3、……、p中的数整除 而q被这2、3、……、p中任意一个整除都会余1,与之矛盾 所以,素数是无限的。 (也可以这样说明:若q能被小于q的数整除,情况有两种,被小于q的素数或被小于q的合数。小于q的素数也就包括在2,3,5,…… p 中,明显不能被他们整除;如果能被小于q的合数m整除,合数m又可以分为两个更小的素数相乘,设m=s*t,则s<m<q,t<m& lt;q,那么q肯定能被s或t中的任何一个整除,而s和t都是小于q的素数,都不能整除q,所以就矛盾。)

满意请采纳

F. 怎样证明素数有无穷多个

这是《数学天书中的证明》中的第一个问题。书中列举了6种证法,这里只说一下大概思路:
(1)假设素数有限,所有素数之积加一不能被任何素数整除,于是我们得到一个新的素数,矛盾。
(2)因为任意两个费马数互素,而费马数有无穷多个,因此有无穷多个素数。
(3)令p为最大的素数,考虑梅森数2^p - 1的素因子。任意一个该数的素因子都大于p,矛盾,所以不存在最大的素数。
(4)log(x)是素数计数函数的一个下界,因为log(x)无界,所以素数无限。
(5)构造整数集上的一个拓扑,使素数和该拓扑上的某些既开又闭的集合一一对应,从而导出一个开集{-1, 1},然后证明{-1, 1}不可能是开集。
(6)证明

发散。

G. 判断是否是素数编程

#include<stdio.h>

int fun(int x)

{

for(int i=2;i<x;i++)

if(x%i==0)

return 0;

return 1;//是素数返回值为 1;

}

int main()

{

int n;

scanf("%d",&n);

if(n<2)

{

while(1)//无限循环,不执行break一直循环;

{

printf("输入错误;请重新输入 ");

scanf("%d",&n);

if(n>=2)

{

printf("输入正确;开始判断 ");

if(fun(n))

{

printf("%d is a prime number.",n);

break;

}

else

{

printf("%d is not a prime number.",n);

break;

}

}

}

}

else//n>=2时的素数判断;

{

if(fun(n))

printf("%d is a prime number.",n);

else

printf("%d is not a prime number.",n);

}

return 0;


}

H. c语言输出100到200之间的素数

解题思路:

首先先找出来100~200以内的所有整数,再让这些整数对除了1和它本身以外的数求余,如果有能整除的就不是素数,否则就为素数。

先找出来100到200的所有整数,都为i

用i去对除了1和它本身以外的数求余。

正确的代码:

#include<stdio.h>

int main()

{

int conut = 0;

int i = 0;

for(i=100; i<=200; i++)

{

int j = 0;

for(j=2; j<i; j++)

{

if(i%j == 0)

break;

}

if(j==i)

{

conut++;

printf("%d ", i);

}

}

printf(" ");

printf("素数个数为:%d ", conut);

return 0;

}

第二个if语句的判断条件应该是j==i;而不是i%j 。

(8)编程无穷素数扩展阅读:

实现的其他方法:

需要用到sort函数,也就是开平方根函数。头文件为#include<math.h>。 显而易见,任何一个数,每一对因子都是由这个数开平方后的数的左右各一个组成,所以,在求余过程中,只需要对从2到开平方之后的数求余即可。遇到可以整除的就不是素数,否则就为素数。

代码:

#include<stdio.h>

#include<math.h>

int main()

{

int count = 0;

int i = 0;

for(i=100; i<=200; i++)

{

int j = 0;

for(j=2; j<=sqrt(i); j++)

{

if(i%j == 0)

break;

}

if(j > sqrt(i))

{

count++;

printf("%d ",i);

}

}

printf(" ");

printf("素数个数为:%d", count);

return 0;

}

I. 关于"素数无穷多"的疑问

只能说明这种证明方法不完善,并且,素数的表示方法并非就这一种,还有其他表示方法,如:n!+1,我们可以这样证明:
假设素数个数有限,则必有一个最大的
设最大的素数是P
令n=2*3*5*7*……*P+1
即把所有的素数相乘并加上1
显然n>P

若因为P是最大素数,所以n是合数
则n能被2,3,……,P中至少一个素数整除
但用这些数去除n,都有余数1,即都不能整除
这就有两种可能
(1),n是素数
(2),n是合数,但他只能被大于P的素数整除
这两种情况都和P是最大素数矛盾。
所以假设错误
所以素数是无限
也可以如下证明:
素数与公因数
1、素数 我们知道,大于1,并且除1和它本身外没有其他因数的自然数叫素数(或质数)

2是最小的素数,除2以外,所有的偶数都不是素数。

按顺序,下列为一个小素数序列:

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,…

不是素数的整数a>1称为合数。例如,因为有3|39,所以39是合数。整数1被称为基数,它既不是质数也不是合数。类似地,整数0和所有负整数既不是素数也不是合数。

关于素数,有如下重要结论:

①素数有无穷个。

证明:假设素数只有有限的n个,从小到大依次排列为p1,p2,...,pn,则 x = (p1·p2·...·pn)+1 显然是不能被p1,p2,...,pn中的任何一个素数整除的,因此x也是一个素数,这和只有n个素数矛盾,所以素数是无限多的。

这个证明的最早来自亚里士多德,非常漂亮,是反证法的经典应用,这个证明被欧拉称为“直接来自上帝的证明”,历代的数学家也对其评价很高。

但是,千万不可认为,形如p1·p2·...·pn+1(其中p1,p2,...,pn均为素数)的数就一定是素数!第八届全国青少年信息学奥林匹克联赛(NOIP2002)提高组初赛试题第三题第2小题,写程序运行结果,程序要找的就是形如p1·p2·...·pn+1(其中p1,p2,...,pn均为素数)的数中第一个是合数的整数。

2*3+1=7 是素数

2*3*5+1=31 是素数

2*3*5*7+1=211 是素数

2*3*5*7*11+1=2311 是素数

2*3*5*7*11*13+1=30031 不是素数,因为30031=59*509

引用内容
华东师范大学版的数学9年级教材P94有这样一个命题:
从素数2开始,排在前面的任意多个素数的乘积加1一定也是素数。
这个结论就是错误的。

虽然最大的素数是不存在的,但是人们却对探知最大的素数乐此不疲。

213466917-1

这是到目前为止人类所发现的最大素数,它是由Michael在2001年12月7日发现的,这是一个梅森素数,有4,053,946位数字。

所谓梅森素数,是以17世纪法国修道士M.梅森的名字命名的.梅森在1644年出版的着作《物理数学随感》的序言中宣称,对于n=2,3,5,7,13,17,19,31,67,127,257,数Mn=2n-1是素数,而对于其他所有小于257的数n,Mn是合数.但是,这里出现了5个错误,M67,M257不是素数,而M61,M89,M107是素数.显然,要使Mn是素数,n本身必须是素数,但是反过来,n是素数,Mn却不一定是素数,例如虽然11是素数,可是M11=2047=23X89是合数.

现在寻找很大的梅森素数时,已经完全依赖于计算机了,可以想象,离开了计算机,我们人类将会落入一种怎样的地步.当D.H.莱默博士这位曾经在梅森素数上花费了许多时光的老学者,亲眼看到了计算机在短短的48秒钟内做完了他20年前花费了700多小时才完成的艰辛劳动,最后证明2257-1是一个合数时,他是多么地感慨万端哪.

时至今日,人类只找到39个梅森素数.前18个梅森素数是n=2,3,5,7,13,17,19,31,61,89,107,127,521,607,1279,2203,2281,3217时的Mn=2n-1.下表列出了从1961年以来所发现的全部梅森素数.

------------------------------------------------------------------------------

素数是无限的,欧几里得在《几何原本》里面已经给出了证明,现在已经有很多种证明方法了。这里我收集一两个。

证法一:
(一)学过初中的同学都知道n!与n!+1互质。故n!与1、2、3、…..n-1、n互质那么n!+1有2种可能(1)n!+1为素数。(2)n!+1为合数
(1)设a=n!+1为素数 集合A={x|0<x≤n x∈N}有b个素数,则集合B={x|0<x≤n!+1 x∈N}内至少有b+个素数
(2)设a=n!+1为合数则在集合B\A中至少有2个元素可以被a整除
易证:c=min{x|x∈B\A 且a/x=h h∈N}为素数。同(1)设集合A内有b个素数。则集合B内至少有b+1个素数
综合(1)、(2)可得:设集合A={x|0<x≤n x∈N}有b个素数,则集合B={x|0<x≤n!+1 x∈N}内至少有b+个素数。
重复(一)操作可得集合C={x|o<x≤(n!+1)!+1 x∈N}内至少有b+2个素数。
继续沿用(一)的操作,用数学归纳法可证:设集合A={x|0<x≤n x∈N}有b个素数,则集合D={x|o<x≤{[(n!+1)!+1]!+1…..}内至少有b+d个素数
d重
由此:当d→+∞时,e=素数的个数≥b+d=+∞
证明完毕。

证法二:(反证)
假设素数是有限的,假设素数只有有限的n个,最大的一个素数是p
设q为所有素数之积加上1,那么,q = ( 2 * 3 * 5 * …… * p )+ 1不是素数
那么,q可以被2、3、……、p中的数整除
而q被这2、3、……、p中任意一个整除都会余1,与之矛盾
所以,素数是无限的。
(也可以这样说明:若q能被小于q的数整除,情况有两种,被小于q的素数或被小于q的合数。小于q的素数也就包括在2,3,5,…… p 中,明显不能被他们整除;如果能被小于q的合数m整除,合数m又可以分为两个更小的素数相乘,设m=s*t,则s<m<q,t<m<q,那么q肯定能被s或t中的任何一个整除,而s和t都是小于q的素数,都不能整除q,所以就矛盾。)

J. c#求素数

int j, n = 0;
Console.WriteLine("输出1000以内的所有素数:");
for (int i = 2; i <= 1000; i++)
{
for (j = 2; j <= i -1; j++)
{
if (i % j == 0)
break;

}
if (j > i-1 )
{
n += 1;
Console.Write("{0}\t", i);
}
}
Console.WriteLine();
Console.WriteLine("统计共有:{0}个数", n);
Console.Read();

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:628
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:357
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:75
php微信接口教程 发布:2025-04-16 17:07:30 浏览:300
android实现阴影 发布:2025-04-16 16:50:08 浏览:788
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:338
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:204
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:801
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:357
土压缩的本质 发布:2025-04-16 16:13:21 浏览:583