sum can not be used As function
素数和
题目内容:
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入格式:
两个整数,第一个表示n,第二个表示m。
输出格式:
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:
2 4
输出样例:
15
注:以下为错误函数示范
#include<stdio.h>
int sum(int n)
{
int sum = 0;
int x,t;//x是我们的被除数,t是除数
int cnt = 0;
for(x=2;cnt<=n;x++){
int isPrime = 0;
for(t=2;t<x;t++){
if(x%t==0){
isPrime=1;
break;
}
}
if (isPrime==0){
sum += x;
cnt++;
}
}
return sum;
}
int main(){
int a,b;
int n;//是我们的数量
int sum;
scanf("%d %d",&a,&b);
int s1,s2,s3;
s1=sum(a-1);
s2=sum(b);
s3=s2-s1;
printf("%d",s3);
return 0;
}
Q1.该段代码未能通过编译,
显示错误:'sum' can not be used As function
据排查,所定义的函数名称sum又在该函数内作为变量出现,造成编译器识别混乱。
解决方法:改变函数的名称 例如:将函数名sum改为summ
Q2:同时该函数还存在其他计算的问题,即cnt=0,cnt<=n
例如n=2(仅仅希望计算前两个素数的和)但由于cnt<=2;cnt++;该循环能走3次,一直计算到第三个数的和。与本意相违
解决方法:cnt=1;cnt<=n 或cnt=0;cnt<n;
正确代码示范:
#include<stdio.h>
int summ(int n)
{
int sum = 0;
int x,t;//x是我们的被除数,t是除数
int cnt = 0;
for(x=2;cnt<n;x++){
int isPrime = 0;
for(t=2;t<x;t++){
if(x%t==0){
isPrime=1;
break;
}
}
if (isPrime==0){
sum += x;
cnt++;
}
}
return sum;
}
int main(){
int a,b;
int n;//是我们的数量
int sum;
scanf("%d %d",&a,&b);
int s1,s2,s3;
s1=summ(a-1);
s2=summ(b);
s3=s2-s1;
printf("%d",s3);
return 0;
}