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

输入:共两行,第一行一个整数,为输入正整数的个数n(1<=n<=1000);第二行n个空格隔开的正整数Ai(1<=Ai<=1000)输出:一行,对于每个正整数,如果是素数... 输入:共两行,第一行一个整数,为输入正整数的个数n(1<=n<=1000);第二行n个空格隔开的正整数Ai(1 <= Ai <= 1000)
输出:一行,对于每个正整数,如果是素数则输出YES,否则输出NO,中间用空格隔开。
以下是我编写的程序
#include<stdio.h>
int main()
{
int n,x[1000],i,k,g=0;
scanf("%d\n",&n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&x[i]);
if(x[i]==1)
printf("NO ");
else if(x[i]==2)
printf("YES ");
else
{
for(k=2;k<=x[i]-1;k++)
{
if(x[i]%k==0)
g=1;
}
if(g==0)
printf("YES ");
else
printf("NO ");
}
}
return 0;
}
为什么不对呢
展开
 我来答
博学小赵爱生活
高能答主

2019-05-29 · 专注于食品生活科技行业
博学小赵爱生活
采纳数:456 获赞数:111875

向TA提问 私信TA
展开全部

将: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);


}



985967518
推荐于2017-09-28 · 知道合伙人教育行家
985967518
知道合伙人教育行家
采纳数:18027 获赞数:109865
14年本科毕业于河南理工大学,至今就读于河南理工大学攻读硕士学位,从事编程学习已有5年。

向TA提问 私信TA
展开全部

素数:有无限个,除了1和它本身以外不再有其他的因数。所以可以通过for循环从2到n-1依次整除n如果能整除则不是素数,否则就是素数。

参考代码:

#include <stdio.h>
int fun(int n){//判断n是否是素数 
int i;
for(i=2;i<n;i++)
if(n%i==0) return 0;
return 1;
}
int main()

int n;
scanf("%d",&n);
if(fun(n))
printf("%d是素数!\n",n);
else 
printf("%d不是素数!\n",n);
return 0; 
}
/*
运行结果:
5
5是素数!
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
永星天恒
推荐于2017-09-04 · TA获得超过1204个赞
知道小有建树答主
回答量:439
采纳率:100%
帮助的人:225万
展开全部
#include<stdio.h>
int main()
{
int n,x[1000],i,k,g=0;
scanf("%d\n",&n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&x[i]);
if(x[i]==1)
printf("NO ");
else if(x[i]==2)
printf("YES ");
else
{
for(k=2,g=0;k<=x[i]-1;k++) /*在这里你错了,必须有g=0*/
{
if(x[i]%k==0)
g=1;
}
if(g==0)
printf("YES ");
else
printf("NO ");
}
}
return 0;
}
修改后测试结果正确
追问
请问还有更简单的代码吗
追答
按照你的思路,代码应该不能更简单了,但你定义的数组太大,浪费空间,该为字符变量即可:
#include
int main()
{
int n,a,i,k,g=0; /*x[1000]改为a,后面的也都该为a即可,已经经过测试*/
scanf("%d\n",&n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&a);
if(a==1)
printf("NO ");
else if(a==2)
printf("YES ");
else
{
for(k=2,g=0;k<=a-1;k++) /*在这里你错了,必须有g=0*/
{
if(a%k==0)
g=1;
}
if(g==0)
printf("YES ");
else
printf("NO ");
}
}
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-23
展开全部
输入:共两行,第一行一个整数,为输入正整数的个数n(1<=n<=1000);第二行n个空格隔开的正整数Ai(1 <= Ai <= 1000)
输出:一行,对于每个正整数,如果是素数则输出YES,否则输出NO,中间用空格隔开。
以下是我编写的程序
#include<stdio.h>
int main()
{
int n,x[1000],i,k,g=0;
scanf("%d\n",&n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&x[i]);
if(x[i]==1)
printf("NO ");
else if(x[i]==2)
printf("YES ");
else
{
for(k=2;k<=x[i]-1;k++)
{
if(x[i]%k==0)
g=1;
}
if(g==0)
....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haolizhong4924
2011-10-22 · TA获得超过5217个赞
知道小有建树答主
回答量:600
采纳率:50%
帮助的人:263万
展开全部
你将:
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,当然就不能保证对了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式