zoukankan      html  css  js  c++  java
  • 素数筛选法

    筛选法(埃拉托色尼(Eratosthenes)筛法)求素数,例如1~100

    思想:逐个筛选,直到int(sqrt(100))个

    1)因为1不是质数,将1筛去

    2)2是质数,将2的倍数全都挖掉

    3)3是质数,将3的倍数全都挖掉

    4)4已经被挖去,不进行与4相关的操作

    5)5是质数,将5的倍数全都挖掉

    6)这个过程一直进行到后面的数全都挖掉为止

    不是从1开始:如10~18----一个一个筛--->18

    #include <stdio.h> 
    #include <math.h>
    #include <stdlib.h>
    //#include <string.h>
    int isprime(int n)
    {
        int i;
        if(n == 1)
            return 0;
        for(i=2;i<(int)sqrt(n);i++)
            if(n%i == 0)
                return 0;
        return 1;
    }
    int main()
    {
        int n,i,j;
        scanf("%d",&n);
        int *num = (int*)malloc(sizeof(int)*(n+1));
        //memset(num,0,n+1);//不能将动态开辟的数组数都初始化为0
        for(i=1;i<=n;i++)
            num[i] = 0;
        //挖数
        num[1] = 1;
        for(i=2;i<=(int)sqrt(n);i++) 
        {
            if(!num[i])
            {
                if(isprime(i))
                {
                    for(j=2*i;j<=n;j++)    //挖掉质数的倍数的数 
                        if(j%i == 0)
                            num[j] = 1;
                }
            }
        }
        for(i=1;i<=n;i++)
            if(!num[i])
                printf("%d ",i);
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    汉诺塔问题
    Java中的int类型取值范围
    unsigned 类型
    CharBuffer
    铺地砖问题(递归)
    汉诺塔简略
    Long类型的构造方法被遗弃,代替的是valueOf
    坏掉的项链
    挤牛奶
    修理牛棚
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5331123.html
Copyright © 2011-2022 走看看