文章

6

粉丝

137

获赞

2

访问

5.8k

头像
非素数个数 题解:
P1701 厦门大学2017年机试题
发布于2023年9月15日 16:05
阅读数 1.3k

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#include<math.h>
#define N 10000000

/*
埃拉托斯特尼筛法是一种用于找出一定范围内所有素数的算法: 
1.首先,创建一个包含从2到所需范围内所有数字的列表。
2.从最小的素数2开始,将其标记为素数,并将其倍数(除了自身)标记为合数。
3.继续找到下一个未被标记的素数,将其标记为素数,并将其倍数标记为合数。
4.重复步骤3,直到找到的素数的平方大于所需范围的最大值。
5.最后,未被标记为合数的数字即为素数。
*/ 

int primes[N];//primes数组用于存储素数。在isPrime函数中,当发现一个素数时,将其存储在primes数组中。cnt变量用于记录已经存储的素数的数量。
int st[N], cnt = 0; //st数组用于标记数字是否为素数。数组的索引表示数字,数组的值表示该数字是否为素数。0表示为素数,1表示为非素数 
   
void isPrime(int n)
{
    st[1] = 0; //st的值初始化都为0 
    for(int i = 2;i <= n; i++)
    {
        if(!st[i]) //如果st[i]为非素数 
        {
            primes[cnt] = i;
            cnt++;
        }
        //通过遍历素数数组 primes,将能被素数整除的数标记为非素数,从而筛选出素数。
        for...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发