用函数求素数和
为什么要定义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:20 编辑
函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有比 i 小的整数,从中查找 i 的因子,如果找到了,那就说明先前的假设不成立, i 不是一个素数,于是,修改 ret 的值为ret = 0,并终止查找。如果没有找到,那就说明先前的假设成立, i 确实是素数,ret 的值也自然会保持 ret = 1。函数退出的时候,会用 return ret 语句返回 ret,这样,根据函数的返回值是 1 还是 0 就可以判断 i 是不是素数了。 jackz007 发表于 2021-11-2 12:01
函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有 ...
差不多明白了,谢谢
jackz007 发表于 2021-11-2 12:01
函数 int isPrime(int i) 在开始的时候,先假定 i 是素数 ret = 1,然后,用穷举的方法,遍历所有 ...
我想问一下,关于这个代码运行顺序,他是不是 给i一个值,然后这个值进入函数进行判断,然后再回来看是否为素数,进行下一步操作,进行完一遍后,再给i另一个值,i再次进入函数进行判断,以此遍历i,最终输出想要的结果 喜你 发表于 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") ;
} jackz007 发表于 2021-11-2 12:45
是的,考察下面的代码,打印 100 以内所有的素数:
非常感谢
页:
[1]