鱼C论坛

 找回密码
 立即注册
查看: 2370|回复: 4

C语言

[复制链接]
发表于 2021-10-29 16:52:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
【问题描述】求指定区间[A,B]之间的素数和。比如求100-300之间的素数和
,其中,区间的上下界由用户输入,最后输出区间的素数和。

【输入形式】10 30        

【输出形式】10-30之间的素数和是112
【样例输入】10 30
【样例输出】10-30之间的素数和是112

【样例说明】输入的A和B以空格分开*/
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-29 17:03:45 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-29 17:14 编辑

代码:
  1. #include <stdio.h>
  2. #include <stdbool.h>

  3. bool isPrime(int n){
  4.     if(n < 2) return false; // 当数字小于 2 肯定不是素数
  5.     else if(n == 2) return true; // 数字 2 是素数
  6.     for(int i = 2; i < (n>>1); i++) if(n%i == 0) return false; // 从 2 循环至 n/2,假设 n%i == 0 表示除了 1 和 自己还有其他因数,则不是素数
  7.     return true; // 否则就是素数
  8. }

  9. int main()
  10. {
  11.     int A, B, sum = 0;
  12.     scanf("%d %d", &A, &B);
  13.     for(int i = A; i <= B; i++) if(isPrime(i)) sum += i;
  14.     printf("%d", sum);
  15.     return 0;
  16. }
复制代码
输入/输出:
  1. 10 30
  2. 112
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-29 18:12:53 | 显示全部楼层
傻眼貓咪 发表于 2021-10-29 17:03
代码:输入/输出:

还有其他C语言写法吗,不用第二行那个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-29 18:39:11 | 显示全部楼层
柠檬Ccc 发表于 2021-10-29 18:12
还有其他C语言写法吗,不用第二行那个
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int A, B, sum = 0, isPrime;
  5.     scanf("%d %d", &A, &B);
  6.     for(int i = A; i <= B; i++){
  7.         isPrime = 1;
  8.         if(i < 2) isPrime = 0;
  9.         else if(i == 2) isPrime = 1;
  10.         else{
  11.             for(int j = 2; j < (i>>1); j++){
  12.                 if(i%j == 0){
  13.                     isPrime = 0;
  14.                     break;
  15.                 }
  16.             }
  17.         }
  18.         if(isPrime) sum += i;
  19.     }
  20.     printf("%d", sum);
  21.     return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-29 18:52:13 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.     int A, B, i, j, flag, isPrime = 0, sum = 0;
  6.     scanf("%d %d", &A, &B);
  7.     for (i = A; i <= B; i++)
  8.     {
  9.         flag = (int)sqrt(i) + 1;
  10.         for (j = 2; j <= flag; j++)
  11.         {
  12.             if (i % j == 0)
  13.             {
  14.                 isPrime++;
  15.             }
  16.             if (isPrime > 0)
  17.             {
  18.                 break;
  19.             }
  20.         }
  21.         if (isPrime == 0)
  22.         {
  23.             sum += i;
  24.         }
  25.         else
  26.         {
  27.             isPrime = 0;
  28.         }
  29.     }
  30.     printf("%d\n", sum);

  31.     return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表