生成素数的算法1,2,3

 /*生成素数*/
#include <stdio.h>
#define N 10000
int main()
{
    int p, d;
    int is_prime;
    
    for (p = 2; p <= N; p++)
    {
        is_prime = 1;
        
        for (d = 2; d < p; d++)
            if (p % d == 0)
               is_prime = 0;
        
        if (is_prime != 0)
           printf("%d ", p);
    }
    printf("/n");
    
    system("pause");
    return 0;
}

 

/*埃拉托色尼筛网法(Sieve of Erastosthenes)(如果一个数不能被任何素数整除,那么这个数就是一个素数)
1,如果i为素数,则设置a[i]为1;否这设置为0;
2,如果将所有较小素数的倍数都设置为0之后,a[i]仍然保持为1,则可判定它是素数
*/
#include <stdio.h>

#define N 10000

int main()
{
    int i, j, a[N];
   
    for (i = 2; i < N; i++)
        a[i] = 1;
    for (i = 2; i < N; i++)
        if (a[i])
        for (j = i ; j <= N/i; j++)
            a[i*j] = 0;
    for (i = 2; i < N; i++)
   
    if (a[i])
       printf("%4d ", i);
   
    printf("/n");
   
    system("pause");
    return 0;
}

 

/*(如果一个数不能被任何素数整除,那么这个数就是一个素数)
   进一步优化程序的效率,可以再使用列外一个定理:任何一个非素数的整数,肯定会有
   一个小于其平方根的素数因数 ,即是,在判断某个数是否为素数时,我们只需要尝试那
   些小鱼其平方根的素数就可以了
*/

#include <stdio.h>
#include <stdbool.h>
#define N 10000
int main()
{
    int p, i, primes[N], prime_index = 2;
    bool is_prime;
   
    primes[0] = 2;
    primes[1] = 3;
   
    for (p = 5; p <= N; p = p + 2)/*只考虑偶数*/
    {
        is_prime = true;
       
        for (i = 1; is_prime && p / primes[i] >= primes[i]; i++)
            if (p % primes[i] == 0)
               is_prime = false;
       
        if (is_prime == true)
        {
            primes[prime_index] = p;
            prime_index++;
        }
    }
   
    for (i = 0; i < prime_index; i++)
        printf("%i ", primes[i]);
       
    printf("/n");
   
    system("pause");
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值