喜你 发表于 2021-11-2 11:51:31

用函数求素数和

为什么要定义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;
}

jackz007 发表于 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 是不是素数了。

喜你 发表于 2021-11-2 12:24:44

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

差不多明白了,谢谢

喜你 发表于 2021-11-2 12:35:48

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

我想问一下,关于这个代码运行顺序,他是不是 给i一个值,然后这个值进入函数进行判断,然后再回来看是否为素数,进行下一步操作,进行完一遍后,再给i另一个值,i再次进入函数进行判断,以此遍历i,最终输出想要的结果

jackz007 发表于 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")                      ;
}

喜你 发表于 2021-11-2 13:13:35

jackz007 发表于 2021-11-2 12:45
是的,考察下面的代码,打印 100 以内所有的素数:

非常感谢
页: [1]
查看完整版本: 用函数求素数和