用C语言编写一个程序,设计一个判断素数的函数

#include<stdio.h>intprime(intn){intflag=1,i;for(i=2;i<=n/2&&flag==1;i++)if(n%i==0)fla... #include <stdio.h>
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return(flag);
}
void main()
{int x,y;
printf("请输入一个数\n");
scanf("%d",&x);
y=prime(x);
if (y=1) printf("这个数是素数\n");
else printf("这个数不是素数\n");
}

小弟这个程序自己检查不出来哪里错了 输入什么数都判断成素数 可自己就看不出来哪错了
展开
 我来答
lgao622
推荐于2017-09-17 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6552
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部

1.素数是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;

2.在数据处理时只需要判读他的因子除了1和他本身就行了,而且只用计算到 这个数的开方就行了,因为后面的因子和前面的就会倒过来。如同 24 -> 2 x 12 和 12 x 2 一样。

#include<stdio.h>

int IsPrime(int n)  // 判断是否为素数
{
    if (n <= 1) return 0;
    if (n % 2 == 0) return n == 2; // 如果是偶数,只要不是2,其他都是非素数

    for (int i = 3; ; i += 2)
    {
        if (i > n/i) break;  // 等价于 i*i > n, 不用开方
        if (n % i == 0) return 0;
    }
    return 1;
}

int main()
{
    int i, cnt = 0;
    for (i = 1; i < 100; i++)
    {
        if (IsPrime(i))
        {
            printf("%3d ", i);
            if (++cnt%5 == 0)   // 每5个换行
                printf("\n");
        }
    }
    return 0;
}


创作者fi4NhXNmkd
2019-06-18 · TA获得超过3680个赞
知道大有可为答主
回答量:3148
采纳率:33%
帮助的人:193万
展开全部
1.素数是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;
2.在数据处理时只需要判读他的因子除了1和他本身就行了,而且只用计算到
这个数的开方就行了,因为后面的因子和前面的就会倒过来。如同
24
->
2
x
12

12
x
2
一样。
#include<stdio.h>
int IsPrime(int n) // 判断是否为素数
{
if (n <= 1) return 0;
if (n % 2 == 0) return n == 2; // 如果是偶数,只要不是2,其他都是非素数
for (int i = 3; ; i += 2)
{
if (i > n/i) break; // 等价于 i*i > n, 不用开方
if (n % i == 0) return 0;
}
return 1;
}
int main()
{
int i, cnt = 0;
for (i = 1; i < 100; i++)
{
if (IsPrime(i))
{
printf("%3d ", i);
if (++cnt%5 == 0) // 每5个换行
printf("\n");
}
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戟宙龙
2010-05-25 · 超过12用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:35.9万
展开全部
将 if(y=1) 改为 if(y==1)

这个可以。
可以 将 for(i=2;i<=n/2&&flag==1;i++)
改为for(i=2;i<=sqrt(n)&&flag==1;i++)可增加效率加math头文件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
礼赏5
2010-05-25 · TA获得超过141个赞
知道小有建树答主
回答量:548
采纳率:52%
帮助的人:82.1万
展开全部
#include <stdio.h>
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return flag;
}
void main()
{int x,y;
printf("请输入一个数\n");
scanf("%d",&x);
y=prime(x);
if (y==1) printf("这个数是素数\n");
else printf("这个数不是素数\n");
}
是y==0不是y=0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友52aeb54
2010-05-25 · TA获得超过2996个赞
知道小有建树答主
回答量:1261
采纳率:0%
帮助的人:1245万
展开全部
if (y=1) printf("这个数是素数\n");
应该是
if (y==1) printf("这个数是素数\n");
双等于
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式