柠檬Ccc 发表于 2021-10-29 16:52:36

C语言

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

【输入形式】10 30      

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

【样例说明】输入的A和B以空格分开*/

傻眼貓咪 发表于 2021-10-29 17:03:45

本帖最后由 傻眼貓咪 于 2021-10-29 17:14 编辑

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

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

int main()
{
    int A, B, sum = 0;
    scanf("%d %d", &A, &B);
    for(int i = A; i <= B; i++) if(isPrime(i)) sum += i;
    printf("%d", sum);
    return 0;
}输入/输出:10 30
112

柠檬Ccc 发表于 2021-10-29 18:12:53

傻眼貓咪 发表于 2021-10-29 17:03
代码:输入/输出:

还有其他C语言写法吗,不用第二行那个

傻眼貓咪 发表于 2021-10-29 18:39:11

柠檬Ccc 发表于 2021-10-29 18:12
还有其他C语言写法吗,不用第二行那个

#include <stdio.h>

int main()
{
    int A, B, sum = 0, isPrime;
    scanf("%d %d", &A, &B);
    for(int i = A; i <= B; i++){
      isPrime = 1;
      if(i < 2) isPrime = 0;
      else if(i == 2) isPrime = 1;
      else{
            for(int j = 2; j < (i>>1); j++){
                if(i%j == 0){
                  isPrime = 0;
                  break;
                }
            }
      }
      if(isPrime) sum += i;
    }
    printf("%d", sum);
    return 0;
}

foxiangzun 发表于 2021-10-29 18:52:13

#include <stdio.h>
#include <math.h>

int main()
{
    int A, B, i, j, flag, isPrime = 0, sum = 0;
    scanf("%d %d", &A, &B);
    for (i = A; i <= B; i++)
    {
      flag = (int)sqrt(i) + 1;
      for (j = 2; j <= flag; j++)
      {
            if (i % j == 0)
            {
                isPrime++;
            }
            if (isPrime > 0)
            {
                break;
            }
      }
      if (isPrime == 0)
      {
            sum += i;
      }
      else
      {
            isPrime = 0;
      }
    }
    printf("%d\n", sum);

    return 0;
}
页: [1]
查看完整版本: C语言