【c语言】求 1000 以内全体素数之和(适合初学者)

#include<stdio.h>
int main(){
	int a,b,c,i,sum;
	c=0;
	a=1;
	sum=0;
	while(a<=1000){
	for (i = 1; i <= a; ++i)
	{
		b=a%i;
		if(b==0){
			c++;
		}
	}
	if(c<=2){
		sum=sum+a;
	}
	a++;
	}
	printf("%d\n",sum);
	return 0;
}

用c语言求1000以内全体素数之和有以下方式或思路:

  1. 遍历1到1000之间的所有整数,对于每一个整数,判断它是否是素数,如果是素数,就累加到素数之和中。
  2. 用埃氏筛法(Sieve of Eratosthenes)求1000以内的所有素数,然后将素数之和累加即可。埃氏筛法的思路是:从2开始,将2的倍数全部标记为合数,然后再从下一个未标记的数开始,重复这个过程,直到遍历完所有小于等于给定数的数。标记完成后,未被标记的所有数均为素数。

方式一:

#include <stdio.h>

int is_prime(int n) {
    if (n < 2) { // 0和1都不是素数
        return 0;
    }
    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int sum = 0;
    for (int i = 1; i <= 1000; i++) {
        if (is_prime(i)) {
            sum += i;
        }
    }
    printf("1000以内全体素数之和为:%d\n", sum);
    return 0;
}

方式二:

#include <stdio.h>

int main() {
    int sum = 0;
    int is_prime[1001]; // 用数组记录每个数是否是素数,1表示是素数,0表示不是
    for (int i = 0; i <= 1000; i++) {
        is_prime[i] = 1;
    }
    is_prime[0] = is_prime[1] = 0; // 0和1都不是素数
    for (int i = 2; i <= 1000; i++) {
        if (is_prime[i]) { // 如果i是素数,将i的倍数全部标记为合数
            for (int j = i * i; j <= 1000; j += i) {
                is_prime[j] = 0;
            }
        }
    }
    for (int i = 1; i <= 1000; i++) {
        if (is_prime[i]) {
            sum += i;
        }
    }
    printf("1000以内全体素数之和为:%d\n", sum);
    return 0;
}

使用这两种方式计算1000以内的素数时需要注意以下几点:

  1. 对于方式一,要注意在遍历每个数时,可以只遍历到其平方根,这样可以减少不必要的计算。

  2. 对于方式一,需要使用布尔类型的数组来标记是否为素数,初始时将所有元素都设置为true。如果使用int类型的数组,则要注意赋初值为1。

  3. 对于方式一,要注意一些边界条件的处理,比如0和1不是素数,遍历时要从2开始。

  4. 对于方式二,要注意一些边界条件的处理,比如0和1不是素数,遍历时要从2开始,而且每次只需要遍历到该数的一半即可。

  5. 对于方式二,要注意优化,比如可以判断该数是否为偶数,如果是偶数则直接跳过,因为2是唯一的偶素数,其他偶数都不是素数。

  6. 对于方式二,需要使用一个变量来记录素数的和,每找到一个素数就将其加入该变量中。

  7. 在写代码时,可以将判断是否为素数的部分单独封装成一个函数,方便调用和重复使用。

  8. 对于c语言刚入门的人,建议从简单的程序开始,例如从输出一到十的数字开始,逐渐增加难度,不要急于求成,要慢慢来,理解每个程序的基本逻辑和语法,不断地练习和总结,才能更好地掌握c语言编程。

作为一个C语言初学者,想要快速提高自己的代码水平,可以尝试以下几个方法:

  1. 多做练习题:可以从一些在线编程网站或者书籍中找到一些练习题,多写多练,熟悉常见的算法和数据结构,掌握常见的编程思路和技巧。

  2. 看优秀的代码:阅读优秀的开源代码或者一些著名的程序库的源代码,可以借鉴其中的设计思路和实现方法,从中学习到好的编程风格和规范。

  3. 纠正错误和不良习惯:在写代码过程中会出现很多错误和不良习惯,如语法错误、逻辑错误、不合理的变量命名等等。应该及时发现和纠正这些错误和习惯,提高代码的可读性和可维护性。

  4. 多思考多总结:在写代码时不要只关注代码的实现,还要思考问题背后的原理和思路,总结自己的经验和教训,形成自己的思考方式和编程风格。

  5. 多参与社区和讨论:可以加入一些编程社区和论坛,参与讨论和交流,向别人请教问题和分享自己的经验,这样可以快速学习和进步。

总之,提高编程水平需要不断地练习和学习,掌握好的编程思路和技巧,形成自己的编程风格和规范。同时,也要注重实践和总结,多参与社区和讨论,不断挑战和提高自己的能力。

 

以下是一些适合c语言初学者看的书籍:

  1. 《C Primer Plus》(中文名:《C Primer Plus》),Stephen Prata 著,这是一本非常适合初学者的书,通俗易懂,循序渐进,适合初学者自学。

  2. 《C语言程序设计》(第四版),谭浩强 著,这是一本经典的c语言教材,通俗易懂,且覆盖了c语言的各个方面。

  3. 《C语言入门经典》(第五版),Greg Perry 和 Dean Miller 著,这是一本易于入门的书,很好地介绍了c语言的基本概念和语法,配有丰富的实例和练习。

  4. 《C语言程序设计教程》(第二版),曹力 著,这是一本较为深入的c语言教程,介绍了一些高级的概念和技术,适合有一定编程基础的初学者。

  5. 《C程序设计语言》(第二版),Brian W. Kernighan 和 Dennis M. Ritchie 著,这是一本经典的c语言教材,介绍了c语言的基本概念和语法,适合有一定编程基础的初学者。

当然,这些书只是其中的一部分,选择一本适合自己的书籍来学习,一定要多动手实践,不断练习,加深对c语言的理解。

 

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值