原题链接:二级C语言-计算素数和
题目描述:
输入两个正整数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分
7 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include<stdio.h> isprime(int n,int m) { int i,j,count=0,SUM=0; for(i=n;i<=m;i++) { for(j=2,count=0;j<i;j++) { if(i%j==0) count++; } if(count==0) { SUM+=i; } } return SUM; } main() { int m=0,n=0; scanf("%d %d",&n,&m); printf("%d",isprime(n,m)); }#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); } 求教为什么答案半错啊?