#include<stdioh>
int main()
{
int i,j;
int sum = 0;
int flag; //是否为素数
for (i = 2; i <= 51; i++) {
flag = 1;
for (j = 2; j <= i - 1; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
sum += i;
}}
printf("和为:%d",sum);
}
扩展资料:
C语言需要说明的是:
1、一个C语言源程序可以由一个或多个源文件组成。
2、每个源文件可由一个或多个函数组成。
3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。
4、源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。
5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。
6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
参考资料:
百度百科-c语言
3+5+7=12你的结果11是指第一层循环结束之后,X自然是11结果将是从3 加到10
因为break只能中断最里层的循环,所以最好用函数来判断是不是素数
如果一定要这么写, 可以用标号另外,S应该从2开始
#include <stdioh>
void main()
{int x,n=10,i,s=2;
for(x=3;x<=n;x++)
{
for(i=2;i<x;i++)
{if(x%i==0)
goto next;}
printf("%d\n",x);
s=s+x;
next:
;
}
printf("%d\n",s);
}
你的源程序
break之后, 退出内层循环,接着执行外层循环,s=s+x,即不管x是不是素数,都加到S里去了
所以可以用goto跳过不是素数的数
既然 N <= 1000000,那就先计算出前 1000000 个素数并保存在一个数组中,然后根据每次输入的 n 计算这个数组的前 n 项的和就好。
而且 judge 函数里我建议你这样写:
int tmp = (int)sqrt(a);while (i <= tmp)
{
}
如果编译器不做优化,那岂不是每次循环都得计算一次 sqrt(a),浪费了宝贵的时间。
网上的代码意思是:n就是你输入的任意数,判断它是否是素数的方法是用大于2小于n的数去除n,若能整除即不是素数,跳出循环;若数一直增加到n+1都没有被整除,即可输出“素数”。你的源程序:3是素数,很简单,所以用if来提醒输入大于3的数,你的只是另一种素数算法,是优化的算法,更快。因为只需用2到根号a去判断。#include<stdioh>
void main()
{
long sum=0;
int i,t;
printf("素数有:\n");
for(i=100;i<=200;i++)
{
if(i%2!=0)
{
printf("\t%d",i) //打印素数
sum+=i; //求和
}
}
printf("\n素数的和为:%d",sum);
}
具体思路:利用循环判断素数,将结果传递给控制变量,由控制变量来判断是否执行自增以及求和。
注意:1既不是素数也不是合数。
代码如下:
#include <stdioh>
int main ()
{
int a=0,b=0;
int n=0,sum=0;
int x=0,i=0;
scanf("%d %d",&a,&b);
int check=1; //假设为素数
for (x=a;x<=b;x++){
check=1;
for (i=2;i<x;i++){
if (x%i==0){
check=0;
break;
} //该循环用于判定是否为素数,遍历一遍小于x的数,如果有能整除x的即给变量赋值为0,并直接跳出循环
}
if (check != 0 && x!=1){
n++;
sum+=x;
} //该if用于判断之前循环传递的check值,并且加入x是否为1的判断
}
printf("%d %d",n,sum);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)