给定一个整数范围,求该范围内包含的所有素数,输出结果为每行8个固定数据。
给你2种算法,第一种常规迭代法
#include <stdio.h>
int is_prime(int n)
{
for (int i = 2; i*i <= n; i++)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n;
scanf("%d", &n);
int count = 1;
printf("%d\t", 2); // 2是个特殊的素数,单独输出
// 迭代找素数
for (int i = 3; i <=n; i++)
{
if (is_prime(i))
{
printf("%d\t", i);
count++;
if (count % 8 == 0)
printf("\n");
}
}
return 0;
}
第二种,筛法
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d", &n);
// 筛法找素数
int prime[n+1];
memset(prime, 1, sizeof(prime));
for (int i = 2; i * i <= n; i++)
{
if(prime[i])
{
for (int j = i+1; j <= n; j++)
{
if (prime[j] && j % i == 0)
prime[j] = 0;
}
}
}
int count = 0;
for (int i = 2; i <= n; i++)
{
if(prime[i])
{
printf("%d\t", i);
count++;
if (count % 8 == 0)
printf("\n");
}
}
return 0;
}
定义一个判断素数的函数,然后for循环判断指定范围的每个数,是素数则输出,同时统计素数个数,如果是8的倍数就输出换行