鱼C论坛

 找回密码
 立即注册
查看: 2739|回复: 5

[已解决]用函数求素数和

[复制链接]
发表于 2021-11-2 11:51:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么要定义int ret =1;
return ret;是让再次输入的值返回到循环内吗

#include<stdio.h>
#include<math.h>
int isPrime(int i)
{
int ret=1;
        int k;
        for(k=2;k<i-1;k++){
                if(i%k==0)
                {
            ret=0;
                        break;
                }
        }
                return ret;
}
int main()
{
        int m,n;
        int sum =0;
        int cnt =0;
        int i;
        scanf("%d %d",&m,&n);
        if(m==1)m=2;
        for(int i=m;i<=n;i++){
                if(isPrime(i)){
                        sum+=i;
                        cnt++;
                }
        }printf("%d %d\n",cnt ,sum);
        return 0;
}
最佳答案
2021-11-2 12:01:14
本帖最后由 jackz007 于 2021-11-2 12:20 编辑

        函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有比 i 小的整数,从中查找 i 的因子,如果找到了,那就说明先前的假设不成立, i 不是一个素数,于是,修改 ret 的值为  ret = 0,并终止查找。如果没有找到,那就说明先前的假设成立, i 确实是素数,ret 的值也自然会保持 ret = 1。函数退出的时候,会用 return ret 语句返回 ret,这样,根据函数的返回值是 1 还是 0 就可以判断 i 是不是素数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-2 12:01:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-2 12:20 编辑

        函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有比 i 小的整数,从中查找 i 的因子,如果找到了,那就说明先前的假设不成立, i 不是一个素数,于是,修改 ret 的值为  ret = 0,并终止查找。如果没有找到,那就说明先前的假设成立, i 确实是素数,ret 的值也自然会保持 ret = 1。函数退出的时候,会用 return ret 语句返回 ret,这样,根据函数的返回值是 1 还是 0 就可以判断 i 是不是素数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-11-2 12:24:44 | 显示全部楼层
jackz007 发表于 2021-11-2 12:01
函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有 ...

差不多明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-2 12:35:48 | 显示全部楼层
jackz007 发表于 2021-11-2 12:01
函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有 ...

我想问一下,关于这个代码运行顺序,他是不是 给i一个值,然后这个值进入函数进行判断,然后再回来看是否为素数,进行下一步操作,进行完一遍后,再给i另一个值,i再次进入函数进行判断,以此遍历i,最终输出想要的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-2 12:45:01 | 显示全部楼层
喜你 发表于 2021-11-2 12:35
我想问一下,关于这个代码运行顺序,他是不是 给i一个值,然后这个值进入函数进行判断,然后再回来看是否 ...

      是的,考察下面的代码,打印 100 以内所有的素数:
#include <stdio.h>

int isPrime(int i)
{
        int ret = 1             ;
        int k                   ;
        for(k = 2 ; k < i - 1 ; k ++) {
                if(i % k == 0) {
                        ret = 0 ;
                        break   ;
                }
        }
        return ret              ;
}

int main(void)
{
       int c , i                    ;
       for(c = 0 , i = 2 ; i < 100 ; i ++) {
               if(isPrime(i)) {
                       if(c) printf("\t") ;
                       printf("%2d" , i)  ;
                       c ++               ;
               } 
        }    
        printf("\n")                      ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-2 13:13:35 | 显示全部楼层
jackz007 发表于 2021-11-2 12:45
是的,考察下面的代码,打印 100 以内所有的素数:

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-4 15:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表