指定范围的素数求和
本题要求编写程序,现在,给定两个整数n和m,保证 0<n<=m<=200,计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。我们认为2是第1个素数,然后是3,5,7分别是第2,3,4个
输入格式:
两个整数,第一个表示n,第二个表示m。
z
输出格式:
一个整数,表示第n个素数到第m个之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:
2 4
输出样例:
3+5+7=15
我的想法是定义一个数组用来存放素数,然后需要第几个就方便一点,还请各位指正一下,如果又更简单的方法还请教我一下。
#include<stdio.h>
int main ()
{
int m,n,a[200];
int i,j,k;
scanf("%d%d",&n,&m);
for(i=2;i<=200;i++)
{
if(i==2)
{
*a=2;
}
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
else
{
if(j==i-1)
{
for(k=1;k<200;k++)
{
*(a+k)=i;
}
}
}
}
}
int sum=0;
for(k=n-1;k<=m-1;k++)
{
sum+=a[k];
if(k!=m-1)
{
printf("%d+",a[k]);
}
else
{
printf("%d",a[k]);
}
}
printf("=%d",sum);
return 0;
}
你的想法是好的,但是如果确定了n,m的范围的,完全可以建立一张固定的素数表,然后直接映射,但是你这个代码写的有点复杂,我教你一个简单一点的写法:
/** PrimberNumberOfSum.c -- 求指定范围内的质数之和 */
#include <stdio.h>
/*
指定范围的素数求和
本题要求编写程序,现在,给定两个整数n和m,保证 0<n<=m<=200,计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。我们认为2是第1个素数,然后是3,5,7分别是第2,3,4个
输入格式:
两个整数,第一个表示n,第二个表示m。
z
输出格式:
一个整数,表示第n个素数到第m个之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:
2 4
输出样例:
3+5+7=15
*/
int main(void)
{
// 1.定义质数表,因为确定了nm的范围,所以这里写死
int prime[] = {
2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67,
71,73, 79, 83, 89, 97, 101, 103, 107,
109, 113,127, 131, 137, 139, 149, 151,
157, 163, 167, 173,179, 181, 191, 193,
197, 199,
};
// 定义变量nm
int m,n;
// 提示性输出
printf("请输入nm的值:");
// 2.读取mn的值
scanf("%d%d", &n, &m);
int sum = 0, i, len = sizeof(prime)/sizeof(prime[0]);
// 3.处理指定区间范围内的素数之和
for (i = 0; i < len; i++)
{
int num = prime[i];
if(num >= n && num <= m) {
sum += num;
}
}
printf("指定范围内的素数之和为%d\n", sum);
return 0;
}