Count Primes —— Leetcode

本文介绍了一种基于埃拉托斯特尼筛法的算法,用于计算小于非负整数n的所有质数的数量。通过使用布尔数组标记合数,并迭代去除它们,最终得到所需质数的总数。

Description:

Count the number of prime numbers less than a non-negative number, n

click to show more hints.

参考References第二个链接,wikipedia上的动图,筛选算法,最后得出素数个数,算法如下:


注意int *array = new int[n]和int *array = new int[n]()的区别,前者不对数组初始化,后者初始化为0;

另外一个需要注意的地方是两个for循环的终止条件,不大于sqrt(n)和n;

我的源码如下:

class Solution {
public:
    int countPrimes(int n) {
        if(n<=2)
            return 0;
        int *array = new int[n]();
        int tmp, sum, count = n-2;
        for(int i=2; i<=(int) sqrt(n); i++)
        {
            if(!array[i])
            {
                tmp = i*i;
                for(int j=0; (sum=tmp+i*j)<n; j++)
                {
                    if(!array[sum])
                    {
                        array[sum] = true;
                        count--;
                    }
                }
            }
        }
        delete []array;
        
        return count;
    }
};

### Parameters in the `main` function The `main` function in the provided C program utilizes two primary variables—`n` and `count`—to control program logic and output formatting. These variables play crucial roles in determining the range of prime number evaluation and structuring the display of results, respectively. #### Parameter `n` The variable `n` represents the upper limit of the range within which the program identifies and prints all prime numbers. It is obtained from user input and must fall within the valid range of 2 to 1000 to ensure computational feasibility and adherence to the intended scope of the program. If the user provides a value outside this range, an error message is displayed, and no prime number computation is performed. This constraint is enforced to maintain program stability and ensure meaningful output. ```c scanf("%d", &n); // Read user input for the upper limit ``` #### Parameter `count` The variable `count` is an integer counter used to manage the formatting of the output. Specifically, it ensures that the list of prime numbers is displayed in a structured manner, with no more than 10 numbers per line. Each time a prime number is identified and printed, `count` is incremented. When `count % 10 == 0` and `count != 0`, a newline character is inserted to start a new line of output. Additionally, a comma separator is used between consecutive prime numbers on the same line, except before the first number in a new line. ```c if (count % 10 == 0 && count != 0) { printf("\n"); // Start a new line after every 10 primes } ``` These formatting rules enhance the readability of the console output, particularly when a large number of primes are displayed, and ensure a consistent visual layout across different runs of the program.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值