C语言
【问题描述】求指定区间之间的素数和。比如求100-300之间的素数和,其中,区间的上下界由用户输入,最后输出区间的素数和。
【输入形式】10 30
【输出形式】10-30之间的素数和是112
【样例输入】10 30
【样例输出】10-30之间的素数和是112
【样例说明】输入的A和B以空格分开*/ 本帖最后由 傻眼貓咪 于 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 傻眼貓咪 发表于 2021-10-29 17:03
代码:输入/输出:
还有其他C语言写法吗,不用第二行那个 柠檬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;
} #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]