【问题内容】编写程序生成100个[2,1000]之间随机整数,输出其中的素数,并统计素数的个数。
【输出结果】素数
#include <stdio.h>
int main()
{
//定义变量 并且进行初始化
int i, j, number;
j = 0;
//使用循环判断素数,判断2-1000之间的素数
for (number = 2; number <= 1000; number++) //举出2-1000之间的数字
{
for(i = 2; i <= number-1; i++) //使用辗转相除法进行计算
{
if(number % i == 0) //进行判断结构
break; //满足number/i==0的就说明不是素数
}
if (i >= number) //判断要打印的素数是否满足大于本身
{
printf ("%d\t", number); //打印素数
j = j + 1; //对素数的数目进行累计
if ( j % 8 == 0) //每行只有八个数字的条件
printf ("\n");
}
}
printf ("\n");
return 0;
}
```c
```
该回答引用chatgpt:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int isPrime(int n);
int main() {
int arr[100];
int i, count = 0;
// 生成100个[2,1000]之间的随机整数
srand((unsigned)time(NULL));
for (i = 0; i < 100; i++) {
arr[i] = rand() % 999 + 2;
}
// 打印随机整数
printf("随机整数:");
for (i = 0; i < 100; i++) {
printf("%d ", arr[i]);
}
// 统计素数个数
printf("\n素数:");
for (i = 0; i < 100; i++) {
if (isPrime(arr[i])) {
printf("%d ", arr[i]);
count++;
}
}
// 打印素数个数
printf("\n素数个数:%d", count);
return 0;
}
// 判断素数的函数
int isPrime(int n) {
int i;
if (n < 2) {
return 0;
}
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
在上面的代码中,我们首先使用 srand() 函数初始化随机数种子,然后使用 rand() 函数生成 100 个 [2,1000] 之间的随机整数,并将它们存储在一个 int 数组中。然后,我们遍历该数组,使用 isPrime() 函数判断每个整数是否为素数。如果是素数,则打印出来,并将素数个数加1。最后,我们打印素数个数。
isPrime() 函数接收一个整数作为参数,如果该整数是素数,则返回 1,否则返回 0。该函数的实现采用了一种简单的素数判断算法:从2开始,依次判断每个数字是否能整除该数,如果存在一个数字能整除该数,则该数不是素数。这里我们只需要判断到根号n即可。
注意,在判断一个数n是否为素数时,只需要判断2到根号n之间的所有数字即可。在代码中,我们使用了 i * i <= n 来代替 i <= sqrt(n),以避免使用 sqrt() 函数可能带来的精度问题
我去看看怎么样
【c语言】
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
int main(void) {
int count = 0; // 计数器,用于统计素数个数
srand(time(0)); // 初始化随机数种子
for (int i = 0; i < 100; i++) {
int num = rand() % 999 + 2; // 生成 [2,1000] 之间的随机整数
bool isPrime = true; // 假设 num 是素数
for (int j = 2; j * j <= num; j++) {
if (num % j == 0) { // 如果 num 能被 j 整除,则 num 不是素数
isPrime = false;
break;
}
}
if (isPrime) { // 如果 num 是素数,则计数器加一
count++;
}
}
printf("素数个数: %d\n", count); // 输出素数个数
return 0;
}
#include<stdio.h>
int is_prime(int n)
{
int j = 0;
for (j = 2; j < n; j++)
{
if (n%j == 0)
return 0;
}
return 1;
}
void main()
{
int i = 0;
for (i = 100; i <= 200;i++)
if (is_prime(i) == 1)
printf("%d\n", i);
}
可以进行算法改进:将判断函数 for 语句的判断条件改为 sqrt (求平方根)函数,可大大减少计算时间,提高代码运行效率,此外要引一个新的头文件 #include<math.h>
#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
int j = 0;
for (j = 2; j < sqrt(n); j++)
{
if (n%j == 0)
return 0;
}
return 1;
}
void main()
{
int i = 0;
for (i = 100; i <= 200;i++)
if (is_prime(i) == 1)
printf("%d\n", i);
}
而判断一个数是否为素数的函数为:
#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
int j = 0;
for (j = 2; j < sqrt(n); j++)
{
if (n%j == 0)
return 0;
}
return 1;
}