用C语言编写一个程序 输入2个自然数A,B: 1.输出[A,B]范围内的素数个数。 2.按从小到大的顺序输出这两个数之间的所有公因数。 输入样例 4 8 输出样例 2 1 2 4 说明 请使用for/while循环、for循环实现
时间: 2024-10-21 12:14:39 浏览: 19
在C语言中,你可以使用以下步骤编写一个程序来满足这个需求:
```c
#include <stdio.h>
#include <stdbool.h> // 使用bool类型
// 函数声明:判断是否为素数
bool is_prime(int num);
// 主函数
int main() {
int A, B;
printf("请输入两个自然数A和B(用空格分隔):");
scanf("%d %d", &A, &B); // 输入A和B
// 素数计数
int prime_count = count_primes(A, B);
printf("在区间 [%d, %d]内,共有%d个素数。\n", A, B, prime_count);
// 公因数计算并输出
printf("按从小到大的顺序输出公因数:\n");
for (int i = 1; i <= min(A, B); ++i) {
if (gcd(A, i) == i && gcd(B, i) == i) { // gcd表示最大公约数
printf("%d ", i);
}
}
printf("\n");
return 0;
}
// 判断是否为素数的辅助函数
bool is_prime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) return false;
}
return true;
}
// 计算两个数之间素数个数的函数
int count_primes(int start, int end) {
int count = 0;
for (int i = start; i <= end; ++i) {
if (is_prime(i)) {
count++;
}
}
return count;
}
// 最大公约数的欧几里得算法实现
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 相关问题:
阅读全文