C语言编程判断输入的正整数是否为素数。

 我来答
刺任芹O
2022-11-16 · TA获得超过6.2万个赞
知道顶级答主
回答量:38.7万
采纳率:99%
帮助的人:8583万
展开全部

将:for(k=2;k<=x[i]-1;k++)改成:for(g=0,k=2;k<=x[i]-1;k++)主要是在这个for循环前令g=0。

因为输入的不止一个数,开头的初始化g=0,在第一个数的时候就可能已经被改了。后面的数不重新初始化g=0,就不能保证对了。

判断一个正整数n是不是素数的思路:

思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ √m 之间的每一个整数去除就可以了。

如果 m 不能被 2 ~ √m 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 √m,另一个大于或等于 √m。

例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。

正确代码如下:

#include<math.h>/*sqrt*/

#include<stdio.h>/*scanf,printf,system*/

int isPrime(int n)//判断n是否为素数,如果是则返回1,否则返回0。

{

if(n<=1)return 0;//小于等于1直接退出。

int i;

for(i = 2; i <= (int)sqrt(n); i ++)//从2到算术平方根遍历。

if(!(n%i)) return 0;//存在约数,不是素数,返回0。

return 1;//不存在约数,返回1,表示为素数。

}

main ()

{

int num;

scanf ("%d", &num);

if ( isPrime( num) )//num是素数。

printf ("%d is a prime",num);

else

printf ("%d isn't a prime",num);//num不是素数。

system("PAUSE");//暂停界面。

return 0;

}

扩展资料:

输入一个正整数或0,判断是否为质数:

#include "stdio.h"

int main()

{

while(1)

{

int n,flag,i;

printf("请输入一个数:"); 

scanf("%d",&n);

flag = n/2+1;

if(n==0||n==1)

printf("%d既不是质数也不是合数\n",n);

else if(n==2)

printf("%d是质数\n",n);

else

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

{

if((n%i)==0)

{

printf("%d不是质数,是合数\n",n);

break;

if(i==flag&&(n%i)!=0)

printf("%d是质数\n",n);


}



已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式