C语言:利用int prime(int n)函数,实现输出100~300之间所有素数。

#include<stdio.h>#include<math.h>intprime(intn){inti;for(i=2;i<sqrt(n);i++)/*循环除去sqrt... #include<stdio.h>
#include<math.h>
int prime(int n)
{
int i;
for(i=2;i<sqrt(n);i++) /*循环除去sqrt(n)以下的数*/
{
if(n%i==0)
return(0);/*如果不是素数,返回0*/
}
return 1;/*如果是素数,返回1*/
}

main(void)
{
int i;
for(i=100;i<=300;i++)
{
if(prime(i))
printf("%d ",i);
}
getchar();
}

————

上面的程序 for(i=2;i<sqrt(n);i++) /*循环除去sqrt(n)以下的数*/
{
if(n%i==0)
return(0);/*如果不是素数,返回0*/
}
return 1;/*如果是素数,返回1*/
这一块我没看懂。。。求大神解释,谢谢
展开
 我来答
lgao622
2015-09-15 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
  1. 素数就是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除

#include <stdio.h>

int IsPrime(int n)
{
    if (n <= 1) return 0;
    if (n % 2 == 0) return n == 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()
{
    for (int n = 100; n <= 300; n++)
        if (IsPrime(n))
            printf("%4d", n);
    return 0;
}

yang_bigarm
2012-05-20 · TA获得超过3949个赞
知道大有可为答主
回答量:1664
采纳率:100%
帮助的人:619万
展开全部
{
if(n%i==0) 如果n被i除尽,那说明n不是素数
return(0);/*如果不是素数,返回0*/
}
比n小的所有i都不能除尽n,循环结束,那不就说明n满足素数的定义吗?
return 1;/*如果是素数,返回1*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
江伟77
2012-05-20 · TA获得超过591个赞
知道小有建树答主
回答量:230
采纳率:100%
帮助的人:208万
展开全部
for(i=2;i<sqrt(n);i++)
最好改为
for(i=2;i<=sqrt(n);i++)

意思是:
假设n(存在)最大约数是i,那肯定有i*i<=n,
即i<=(√n)
sqrt()是c语言中求方根的函数
所以有i<=sqrt(n)

不知是不是这一块不懂。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-20
展开全部
应该是i<=sqrt(n)
如果一个数是合数,那么它的所有因子将不会超过它的开方
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-20
展开全部
一个素数它只能被1和它自身整除,而不能被其他整数整除,这样判断一个数是素数我们关键就看它是否能被在1~它自身范围内的值其他值整除了。一个很正常的思路就是
for(i=2; i<n; i++)
{
if(n%i==0)
return 0;/*能够被整除,说明这个数不是素数,这个就会返回0*/
}
return 1;/*如果这个函数能运行到这一步,说明n%i==0没有成立过,就是n不能被2~n-1中任何一个数整除,所以就是素数*/
我们再来看看我们循环的范围是否一定需要2~n-1,不一定,我们可以优化一下程序,循环的范围只需要2~sqrt(n) (n平方根)就行了,想一想,判断一个数n能否整除大于sqrt(n)的数这是没必要的,因为这里肯定不能整除。还有这for循环中应该是i<=sqrt(n);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式