C语言 统计素数并求和

C语言 统计素数并求和,第1张

#include<stdioh> #include<mathh> int f1(int x); int main() { int n=0,i; for(i=50;i<=100;i++) { if(f1(i)) { printf("%d ",i); n++; if(n%5==0)printf("\n"); } } printf("共有%d个素数\n",n); return 0; } int f1(int x) { int i,z,r; r=(int)sqrt(x); for(i=2;i<=r;i++) { if(x%i==0) break; } if(i>r) z=1; else z=0; return(z); }

#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;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10429849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存