
正文
c语言程序改错素数,c语言素数问题
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言程序帮忙改一下错,判断m是否素数
1、if(m%i==0)break;if(ik) printf(prime number!\n);else printf(no!\n);} 计算机实际执行了for(i=2;i=k;i++)if(m%i==0)break;也就是两个选择分支在一起不能这么写,要if{}。。else if{}。
2、思路1:判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。
3、思路判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。思路判断方法还可以简化。
4、那么对于非素数M来说,必然是一个大于sqrt(M),一个小于sqrt(M),或者两个数等于sqrt(M),所以,只要验证2到 sqrt(M)中是否有能整出M的就可以了,简单的说,就是要找到可分解M的那个较小的因数。
相关问答
Q1: c语言求素数(改错)
int a,b,c,i=0;scanf(%d,&a);for(b=2;b=a;b++){ for(c=2;c=b-1;c++)if(b%c==0)break;if(c=b,因为c==b了就说明从2到b-1没一个数能整除b,因此它是素数。
int IsPrimeNumber(int m){ int i,k;if((m==0)||(m==1)) return FALSE;k=(int)sqrt(m);for(i=2;i=k;i++) // 这里是i=k,想想m=49时,k=7的情形。
int n;int k;int i;for(n=100;n=200;n++){ k=sqrt(n); /*在前面,n值不知道,怎么给k赋值*/ for(i=2;i=k;i++)if(n%i==0)break;if(i==k+1) /*等于就行了。
除2以外,素数皆为奇数,所以对2单独处理,从3开始,将100以内的奇数逐一进行素数考察,是则输出,不是则跳过。另设一计数变量控制换行,每输出5个素数添加一个回车。
if(i%j==0) goto a;for循环还没执行完,你就又goto到for循环的这一句,等于已知一个数是合数,你还在判断它是否能被分解,答案是肯定的,所以就死循环了。
Q2: C语言程序改错,判断是否为素数。(提示:编译无错误,是逻辑错误)
1、for(k=2;k=n/2;k++) { if(n%k==0) // 存在能整除n的k,所以n是非素数。 return 0; } // 没有能整除n的整数,则n是素数。
2、点击启动按钮进行编译调试,根据错误提示修改,直至无误为止。点击窗体会弹出提示对话框,输入要判断素数的数值,点击确定按钮,这个时候自动进行判断并给出结果。
3、程序语法、思路都是没问题的。就是 if(i=n) printf(该数字为质数。\n);这句应改为if(i==n) printf(该数字为质数。\n);=是赋值,==才是是否等于。
4、如果可以整除,则打印“不是素数”并退出循环,否则继续下一轮循环。兼容性问题:应在程序获得输入之后进行初步判断,如果该数字为0,1和负数时打印相关提示信息 性能问题:1)i每次的步长可考虑设置为2,对于2进行单独处理。
Q3: C语言求素数程序改错
1、cout m //输出素数 } return 0;} 这样改就对了,改动的地方是下面几个: prime函数要放在main函数之前,main函数少了个大括号 main函数中for (m=2;m=99;++m) 这里用++m实现m的递增。
2、if(i%j==0) goto a;for循环还没执行完,你就又goto到for循环的这一句,等于已知一个数是合数,你还在判断它是否能被分解,答案是肯定的,所以就死循环了。
3、for(m=200;m=300;m++) 改成 for(m=200;m=300;m++)。m循环应该加大括号,把if(im/2)这个累加判断一起括进去(否则你这个累加不在m循环中,起不到作用)。
4、否则除非你是神仙,不然打死我都不相信会有结果。*/ /***FOUND***/ return m; //返回值应该是K,k是用来判断是不是素数的标记。
5、如果是等考的话,错误一般在***found***处,一般的话就是首先编译器查错,面对小型的程序一般就可以了,如果是逻辑错误 那就要看你的功底进行人工纠错了。打字不易,如满意,望采纳。
c语言程序改错素数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言素数问题、c语言程序改错素数的信息别忘了在本站进行查找喔。






