题目描述:
输入两个正整数m和n(m<n),求m到n之间(包括m和n)所有素数的和,要求定义并调用函数isprime(x)来判断x是否为素数(素数是除1以外只能被自身整除的自然数)。
输入
m n
输出
素数和
样例输入
2 3
样例输出
5
解题思路:
本题要求定义并调用isprime(x)。可能有部分朋友上来直接写isPrime函数有点小难度,那么我采用的方法是先"一气呵成"两个for循环,判断如果是素数,累加就行,不是素数跳出循环。然后把里面的实现代码封装成isprime(x)函数即可!
对于算法如果不是太理解,可以看看下面这篇文章,都是相同的算法,讲解的比较详细!
https://blog.dotcpp.com/a/56754
注意事项:
下面两种都可以成功通过见面测试! 感兴趣的可以参考下!
参考代码(直接法):
#include <stdio.h> int main() { int m,n,sum=0; scanf("%d%d",&m,&n); for(int i=m; i<=n; i++) { for(int j=2; j<=i; j++) //j是被除数,j取2~i之间,如果都不能整除,则i是素数 { if(i%j==0&&i!=j) break; //不是素数,跳出 else if(i%j==0&&i==j) sum+=i; //是素数,累加 } } printf("%d",sum); }
方法二:(isPrime函数)
#include <stdio.h> int isPrime(int m,int n); //声明isPrime()函数 int main() { int m,n; scanf("%d%d",&m,&n); printf("%d",isPrime(m,n)); } int isPrime(int m,int n) //实现isPrime()函数 { int sum=0; for(int i=m; i<=n; i++) { for(int j=2; j<=i; j++) { if(i%j==0&&i!=j) break; if(i%j==0&&i==j) { sum+=i; } } } return sum; }
0.0分
10 人评分
#include<stdio.h> int main() { int m,n,a=0,b=0; int i; scanf("%d%d",&m,&n); if(n<m) { a=n; n=m; m=a; } for(i=m;i<=n;i++) { b+=isprime(i); } printf("%d\n",b); return 0; } int isprime(int x); int isprime(int x) { int i,k=0; int sum=0; for(i=1;i<=x;i++) { if(x%i==0) k++; } if(k==1||k==2) { sum+=x; } return sum; }
#include<stdio.h> #include<math.h> bool isprime(int n) { if(n<=1) return false; for(int i=0;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main() { int m,n; scanf("%d %d",&m,&n); int t=0; for(int i=m;i<=n;i++) { if(isprime(i)) t+=i; } printf("%d",t); return 0; }
#include <stdio.h> #include <string.h> int ifprime(int m,int n) { // printf("%d %d\n",m,n); int sum = 0,flag; for(int i=m;i<=n;i++) { flag = 1; for(int j =2;j<i;j++) { if(i%j==0) { flag = 0; } } if(flag == 1){ sum = sum +i; } } printf("%d",sum); } int main(){ int m,n; scanf("%d%d",&m,&n); ifprime(m,n); return 0; } 为什么只有50分呀
#include "stdio.h" int isprime(int x) { int i; if(x==1)return(0); else if(x==2)return(1); else for(i=2;i<x;i++) { if(x%i==0)return(0); else return(1); } } void main() { int n,m,i,k=0; scanf("%d%d",&m,&n); for(i=m;i<=n;i++) if(isprime(i)==1)k+=i; printf("%d",k); } 求教为什么答案半错啊?