c语言为什么判断素数用sqrt ?拜托各位大神

作者&投稿:希览 (若有异议请与网页底部的电邮联系)
c语言中,为什么可以用平方根判断素数?请说得详细点。谢谢! 急!!!~

你理解错了。
不是用平方根判断素数,而是最大取到平方根的整数,可以有效减少循环的次数。这个属于程序的优化。

当那个for循环结束了,,那个i就是k+1了!!而当那个i=k+1时,说明for一直运行完都没有break,所以m就是素数!!!

你好,我们假设一个数a; 那么a=(a^1/2)*(a^1/2); 如果a不是素数; 那么a有一个因子b a=b*c; 那么a的因子中(b或c)必定有一个是小于等于a^1/2的; 所以判断的时候不用判断到1-a,只需要1-a^1/2; 明白了吧?

k=sqrt(n)
for(i=2;i<=k;i++)
中的k有利于减少无用的循环次数。
因为根据数学推理可知,判断一个数是不是素数不用都除于所有小于此数的数的。只要除数小于该数的平方根就足以判断该数是不是素数了。
这也体现C语言的程序简洁特点。


C语言编写一个程序判断一个数是否为素数?急求
对接收的变量判断其是否为素数,判断的依据是如果能被2到n-1中的某个数整除就是素数,否则就不是。最后把判断的结果打印出来即可:3、最后编译运行调试一下程序,按下crtl+F5编译,在弹出的命令行中输入17这个素数,程序判断的结果是素数说明程序的逻辑是没有问题的。以上就是C语言判断素数的方法:...

c语言中判断自然数是不是素数的条件是什么
1,首先了解素数的定义,一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。2,以下是C语言程序。include "stdio.h"int main(){ int n,flag=1,i;scanf("%d",&n);\/\/输入一个数n,判断它是否是素数。for(i=2;i<n;i++){ if(n%i==0)\/\/ 根据素数的定义n依次除以小于它本身...

c语言for循环判断素数是什么?
c语言for循环判断素数是质数。质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。假设循环为for (i=2;i<=x;i++)如果输入x=7,i=2,2...

c语言判断素数 为什么是k*k而不是k呢
k*k<=n相当于k<=sqrt(n),因为若一个合数m可以表示成a*b,则a<=b范围内的a的最大解就是a=b,即m=a²。如果存在更大的a,则可以直接与b互换,此时的b就一定是之前a已经有的解。

c语言for循环判断素数是什么?
如下图所示:for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是...

判断素数的c语言程序是什么?
基本思想:把m作为被除数,将2—INT()作为除数,如果都除不尽,m就是素数,否则就不是。可用以下程序段实现:voidmain(){intm,i,k;printf("pleaseinputanumber:\\n");scanf("%d",&m);k=sqrt(m);for(i=2;i<k;i++)if(m%i==0)break;if(i>=k)printf("该数是素数");else printf(...

C语言判断素数
1,首先了解素数的定义,一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。2,以下是C语言程序。include "stdio.h"int main(){int n,flag=1,i;scanf("%d",&n);\/\/输入一个数n,判断它是否是素数。 for(i=2;i<n;i++) {if(n%i==0)\/\/ 根据素数的定义n依次除以小于它本身...

C语言素数的的判别式疑问
只有当从2~~~k之间没有这个数的因子的时候,for语句才能完全全部执行下去,这个时候才能是i=k+1.所以一旦i>=k+1,那就证明for语句的所有循环都执行到了,也就是没有执行if语句里的语句,也就是说在2~~~k之间没有这个数的因子,那么,这个数也就是素数了。满意请采纳!!

c语言 判断素数 程序不太明白
之间的数去除就可以了,常用2~n\/2,因为一个数的一半的平方大于其本身是从5开始的 一个数n的两个因数不能同时比n\/2大。就可以说一个数若不是素数则一定在2~n\/2之间有因数。for(i=2;i<=m\/2;i++) 就是判断 2-n\/2之间的数,当执行到m %2 == 0, 就说明2和n\/2之间是有因数的, ...

素数用c语言判断为什么用i<n\/2
这个其实是利用了很多数学上的特性来做的,这里使用n\/2,也可以,只不过循环次数多了,真正用到根号n就够了,此外还有,2以上的偶数一定不是和数,所以这里还可以继续改进,从3开始循环,增量为2等等。

康定县17052558306: m=sqrt(n)在c语言中为什么可以判断n是素数 -
威裘浦虹: 判断一个数是素数的算法是: ①令m=n的开方向下取整 ②循环检查从2开始到m的每一个数字是否能整除n,如果能,终止循环,返回n非素数 ③循环结束,返回n为素数. m=sqrt(n)只是算法的第一步.

康定县17052558306: c语言中如下程序什么意思?其中为什么要n=sqrt(m) ? -
威裘浦虹: n=sqrt(m) 为了减少素数的运算量 因为 n<sqrt(m) 之前的数判断完成后,后面的就不再需要判断了. 程序是求200-300间素数的和

康定县17052558306: C语言求素数问题:这段代码是一段判断素数的代码,有两个问题:1、为什么不用j<sqrt(i)?为什 -
威裘浦虹: 1. i/2是因为,若果一个数在他的一半以前没有数能整除他的话,那之后也就没有了,因为合数所有的因子中,2是最小的.当然,用sqrt(x)也是可以的,不同的方法而已.2. for语句中,若循环中只有一条语句,则可以不打花括号.所以题中if(j>i/2)语句不在第二个for循环中,即第二个for循环若自然跳出(即没有经过break,所有的j都遍历了之后自然结束循环),此时的j=i/2+1,就表示在i/2之前没有一个数能被整除,就表示这个数是素数.不懂再问 望采纳

康定县17052558306: c语言 - 判断M是否为素数为什么说:如果M能被2…sqrt
威裘浦虹: sqrt是开平方运算,也就是在此时,M表示为两个相等的数相乘.而非素数是说M可表示为两个整数相乘.那么对于非素数M来说,必然是一个大于sqrt(M) ,一个小于sqrt(M),或者两个数等于sqrt(M),所以,只要验证2到 sqrt(M)中是否有能整出M的就可以了,简单的说,就是要找到可分解M的那个较小的因数.

康定县17052558306: c语言中判断一个数m是否是素数,用穷举法时为什么可以将穷举范围从2~m - 1缩小到2~sqrt(m)? -
威裘浦虹: 因为和组合类似, {2,3}和{3,2}对于组合来说是等价的 同理 2*3和3*2对于判断6是否是素数来说也是等价的,所以没有必要再从sqrt(m)计算到m-1

康定县17052558306: k<=sqrt(x)在c语言中求素数啥意思 -
威裘浦虹: 如果要求的数x不是素数,那么它的质因数一定小于sqrt(x),这样判断只是为了减少循环的次数

康定县17052558306: 求教C语言判断素数程序算法,为何j<=sqrt((double)i )?? -
威裘浦虹: 在数学上,对于素数的判断 可以使用从2到这个数的平方根之间的数来检验 这样也可以缩短判断时间 提高程序运行的效率

康定县17052558306: C语言 判断一个数是否为素数??? -
威裘浦虹: 原发布者:邂逅枫林 } if(i==val) printf("YES!\n"); else printf("No!\n");}注:for循环的功能:①若能整除,通过break跳出函数②若一直到val-1都不能整除,此时i再自增1到val,不满足i<val跳出for循环,这时i=val.2.通过函数来判断/* 目的:...

康定县17052558306: c语言如何判断素数 -
威裘浦虹: #include"stdio.h"#include"math.h" main() { int i,k,m; scanf("%d",&i);k=sqrt(i); //判别i是否为素数,只需使2~根号i之间的每一个整数去除 for(m=2;m if(i%m==0)break; if(m>k) printf("%d是素数 ",i); else printf("%d不是素数",i); getch(); }

康定县17052558306: 如何判断素数的c语言程序 - C素数程序?
威裘浦虹: c语言求素数的思路算法方面,用c语言判断一个数是否为素数的方法其实不止一种.今天我所用编程环境Microsoft Visual C++.那么,什么是素数呢?素数是指,一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数,素数也叫质数.求素数的C语言程序,下面我就给大家带来c语言判断素数的代码算法.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网