求区间[2,100]内所有的素数,存于数组 a中
时间: 2024-05-13 12:18:50 浏览: 94
以下是使用筛法求解的代码:
```python
import math
# 初始化数组
a = [True] * 99
# 筛法求素数
for i in range(2, int(math.sqrt(100))+1):
if a[i-2]:
for j in range(i*i, 101, i):
a[j-2] = False
# 将素数存入数组
primes = []
for i in range(2, 101):
if a[i-2]:
primes.append(i)
print(primes)
```
输出结果为:`[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]`,即区间[2,100]内所有的素数。其中,变量`primes`存储了所有的素数。
相关问题
用C语言实现:⑴ 编写函数int rev_prime(int m,int n,int x[]),求区间m到n中的所有整数的反序数,将反序数中的素数存入数组x中,函数的返回值是素数的个数。⑵ 编写main函数,接收从键盘输入的m和n的值,调用函数reverse求m到n之间的所有元素的反序数中的素数,将结果数组按以下要求写到输出文件“out.txt”中。
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int is_prime(int num) { // 判断是否为素数
if (num < 2) {
return 0;
}
for(int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int reverse(int num) { // 求反序数
int res = 0;
while (num) {
res = res * 10 + num % 10;
num /= 10;
}
return res;
}
int rev_prime(int m, int n, int x[]) { // 求区间m到n中的所有整数的反序数中的素数
int count = 0;
for (int i = m; i <= n; i++) {
int rnum = reverse(i);
if (is_prime(rnum)) {
x[count++] = rnum;
}
}
return count;
}
int main() {
int m, n;
printf("请输入m和n的值:");
scanf("%d%d", &m, &n);
int x[n - m + 1]; // 结果数组
int count = rev_prime(m, n, x); // 调用函数求反序数中的素数
FILE *fp = fopen("out.txt", "w"); // 打开输出文件
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
fprintf(fp, "区间[%d, %d]中反序数中的素数有:\n", m, n);
for (int i = 0; i < count; i++) {
fprintf(fp, "%d ", x[i]);
}
fclose(fp);
printf("结果已写入out.txt文件中!\n");
return 0;
}
```
注意事项:
1. 代码中使用了文件操作,需要在程序所在目录下创建一个名为“out.txt”的文件,用于输出结果。
2. 反序数中的素数存入的数组 `x` 需要动态申请内存,因此不能直接定义固定长度的数组。
用c语言编写函数int rev_prime(int m,int n,int x[]),求区间m到n中的所有整数的反序数,将反序数中的素数存入数组x中,函数的返回值是素数的个数。反序数:将原数各位数字颠倒后的数,例如:321的反序数为70,7的反序数为<>。(<>) 编写main函数,接收从键盘输入的m和n的值,调用函数reverse求m到n之间的所有元素的反序数中的素数,将结果数组按以下要求写到输出文件“out.txt”中。
以下是实现该题目的代码,注释中有详细的说明:
```c
#include <stdio.h>
// 判断一个数是否为素数
int is_prime(int num) {
if(num <= 1) return 0; // 1不是素数
for(int i = 2; i * i <= num; i++) {
if(num % i == 0) return 0;
}
return 1;
}
// 反转一个整数的各个位上的数字
int reverse(int num) {
int res = 0;
while(num) {
res = res * 10 + num % 10;
num /= 10;
}
return res;
}
// 求区间[m, n]中的所有整数的反序数中的素数
int rev_prime(int m, int n, int x[]) {
int cnt = 0; // 记录素数个数
for(int i = m; i <= n; i++) {
int rev_num = reverse(i); // 反转i的各个位上的数字
if(is_prime(rev_num)) {
x[cnt++] = rev_num; // 将素数存入数组x中
}
}
return cnt;
}
int main() {
int m, n;
printf("请输入区间[m, n]的值:");
scanf("%d %d", &m, &n);
int x[n - m + 1]; // 定义结果数组
int cnt = rev_prime(m, n, x); // 调用rev_prime函数得到素数个数
FILE* fp = fopen("out.txt", "w"); // 打开输出文件
fprintf(fp, "区间[%d, %d]中反序数中的素数有:\n", m, n);
for(int i = 0; i < cnt; i++) {
fprintf(fp, "%d ", x[i]); // 将结果写入输出文件
}
fclose(fp); // 关闭输出文件
printf("结果已写入out.txt文件中!\n");
return 0;
}
```
注意,上述代码中定义的结果数组 `x` 的长度为 `n-m+1`,因为区间 `[m, n]` 中一共有 `n-m+1` 个整数。
阅读全文