判断1~N个数之间的素数 (优化)

1.using namespace std;  
2.  
3.const int maxn = 1000005;  
4.bool isPrime[maxn];                          //判断是否为素数  
5.int  primeNum[maxn];                         //统计1~x 的素数   
6.  
7.void solve(int n) {  
8.    int i, num = 0;                          //num:统计已经识别的素数  
9.    for(i=0; i<n; i++) {  
10.        isPrime[i] = true;                  //初始化  
11.    }  
12.    isPrime[0] = isPrime[1] = false;        //0、1都不是素数  
13.    for(i=2; i<=n; i++) {                   //从2开始判断   
14.        primeNum[i] = num;                //合数前面的素数就是之前通过素数判断的   
15.        if(isPrime[i]) {                    //如果不是素数则不筛选   
16.            primeNum[i] = ++num;            //新添加一个素数   
17.            for(int j=2*i; j<=n; j+=i) {   //能整除非 1 的数都是合数   
18.                isPrime[j] = false;         //标记判非素数   
19.            }  
20.        }  
21.    }     
22.}  
23.  
24.void show(int n) {                          //打印1~n的素数   
25.    printf("1 ~ %d的素数共有:%d\n", n, primeNum[n]);  
26.}  
27.  
28.int main() {  
29.    solve(maxn);  
30.    int n;   
31.    while(~scanf("%d", &n)) {               //连续输入,以^z结束输入   
32.        show(n);  
33.    }  
34.      
35.    return 0;  
36.}  

   这种方式计算1~N之间的素数效率比一般的1~N循环遍历更高, 主要减少了每个素数的常规判断时间.

转载于:https://www.cnblogs.com/Lunix-touch/p/11219001.html

### 回答1: 以下是判断素数的 Python 代码: def is_prime(n): if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True 如果 n 是素数,返回 True,否则返回 False。 ### 回答2: 判断个数n是否为素数,可以通过判断它是否能被小于n的正整数整除来确定。 首先,排除一些特殊情况,如n小于2时,它不是素数;n等于2时,它是素数。因为2是最小的质数,且只能被1和2整除。 然后,我们可以用一个循环从2开始,依次判断n能否被从2到n-1之间的数字整除。如果找到n能被任意一个数字整除,说明n不是素数;如果循环结束也没有找到能整除n的数字,说明n是素数。 具体算法如下: 1. 判断n是否小于2,如果是,则输出“不是素数”,结束。 2. 判断n是否等于2,如果是,则输出“是素数”,结束。 3. 初始化一个变量flag为true,用于记录是否能找到能整除n的数字。 4. 使用一个循环从2开始,依次判断n能否被从2到n-1之间的数字整除。循环条件为i从2循环到n-1。 - 若n能被i整除,则令flag为false,跳出循环。 5. 判断flag的值,如果为true,则输出“是素数”;如果为false,则输出“不是素数”。 以上就是判断个数n是否为素数的算法。 需要注意的是,对于较大的数n,上述算法的时间复杂度较高,可以通过一些其他的优化算法来提高判断效率。 ### 回答3: 素数是只能被1和自身整除的正整数。要判断个数n是否为素数,我们可以逐个尝试从2到(n-1)之间的所有数,看看是否能被n整除。 算法如下: 1. 当n为1时,返回False,因为1不是素数。 2. 从2开始,逐个尝试除以2到(n-1)这些数。 a. 如果n可以整除任一数m,则n不是素数,返回False。 3. 若2到(n-1)的所有数都无法整除n,则n为素数,返回True。 以下是用Python语言编写的程序,实现上述算法: def is_prime(n): if n == 1: return False for i in range(2, n): if n % i == 0: return False return True 经过上述步骤,我们可以输入一个数n,该程序会判断n是否为素数,并返回相应结果。 注意:这个算法在判断大数时会比较耗时,因为需要逐个尝试大量的数。在实际应用中,如果需要判断大数是否为素数,可能会使用更高效的算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值