描述:
编写函数 fun ,计算从到之间的所有素数,除去最大和最小的素数后,求和
输入:
两个数和 r
输出:
除去最大和最小的素数后,求和
#include <stdio.h>
int IsPrime(unsigned int n);
int fun(unsigned int m, unsigned int n);
int main()
{
int m = 0,n = 0,sum = 0,i = 0;
scanf("%d",&m);
scanf("%d",&n);
sum = fun(m,n);
printf("sum of prime numbers:%d",sum);
return 0;
}
int fun(unsigned int m, unsigned int n)
{
int sum = 0,i,j,max=0,min=100000;
int isPrime;
for(j = m; j<= n; j++)
{
isPrime = 1;
for(i = 2; i < j; i++)
{
if(j%i==0)
{
isPrime = 0;
break;
}
}
if(isPrime==1){
sum+=j;
if(j>max)
max=j;
if(j<min)
min=j;
}
}
return sum-max-min;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fun(int m,int n){
int i,count=0;
int nums[1001];
int sum = 0;
if(m==1)
m=2;
for (i = m; i <= n; i++) {
int isPrime = 1;
int k;
for (k = 2; k < i - 1; k++) {
if (i%k == 0) {
isPrime = 0;
break;
}
}
if (isPrime) {
nums[count++]=i;
}
}
for(int i=1;i<count-1;i++){
sum+=nums[i];
}
return sum;
}
int main()
{
int m,n;
scanf("%d%d", &m,&n);
printf("%d\n",fun(m,n));
return 0;
}
因为不知道m和n的范围,所以最好不要用数组记录所有素数,只需要记录最大和最小值素数,并一直累加求和,最后用所有素数的和减去最大和最小素数即可。代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int fun(int m, int n)
{
int i, k,max=0, min=0, sum = 0;
int flag = 0; //是否已经找到素数标记
int isprime = 0; //素数标记
for (i = m; i <= n; i++)
{
//判定i是否是素数
isprime = 1;
for (k = 2; k < i; k++)
{
if (i % k == 0)
{
isprime = 0;
break;
}
}
if (i < 2) isprime = 0;
if (isprime == 1) //i是素数
{
if (flag == 0) //还没有素数
{
max = i;
min = i;
sum += i; //累加和(最后再减去最大和最小即可)
flag = 1;
}
else
{
if (i > max) max = i;
if (i < min) min = i;
sum += i; //累加和
}
}
}
return (sum - max - min); //返回去掉最大和最小素数后的和
}
int main()
{
int m, n;
int sum = 0;
scanf("%d %d", &m, &n);
sum = fun(m, n);
printf("%d", sum);
return 0;
}
#include <stdio.h>
int isprime(int n);
int main()
{
int sum = 0, min, max, conut=0;
int a,b,i,t;
printf("请输入a b: ");
scanf("%d%d",&a,&b);
if (a>b) {
t=a;
a=b;
b=t;
}
for( i=a; i<=b; i++ ) {
if(isprime(i)){
sum+=i;
conut++;
if (conut==1)
min=i;
max=i;
}
}
if (conut>2)
printf("除去最大和最小的素数后之和:%d", sum-min-max);
else
printf("素数少于3个,除去最大和最小的素数后之和:%d", 0);
return 0;
}
int isprime(int n)
{
int i;
if(n<=3) return n>1;
for(i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
r代表什么?
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!