一些个c++相关问题

给定一个整数范围,求该范围内包含的所有素数,输出结果为每行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的倍数就输出换行