• 7.24 素数总结


    判断素数:

    第一种方法用于小数据。

     1 int k=0;
     2 int isprime(int num)
     3 {
     4      int i, j;
     5      j = sqrt(num);
     6      for (i = 2; i <= j; i++)
     7           if (num%i == 0)
     8             return 0;
     9      return 1;
    10 }

    第二种素数筛选:

    用于大数据,数据很小的话就用第一种吧

     1  建立一个全1的数组(下标2~N),

     2  先将下标是2的倍数的全置0,再将下标是3的倍数全置0,……,以此类推,

     3  最后剩下的,仍是1的那些下标,就肯定是素数了。

     

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 
     5 #define N   100000
     6 #define yes '1'
     7 #define no  '0'
     8 char flag[N+1];
     9 
    10 void is_prime(int n)
    11 {
    12     int i, j;
    13     memset(flag, yes, sizeof(flag));
    14     flag[0]=flag[1]=no;
    15     int len=sqrt(n)+1;
    16     for(i=2; i<len; i++)
    17     {
    18         if(flag[i]==no) continue;
    19         for(j=i+i; j<=n; j+=i)
    20             flag[j]=no;
    21     }
    22 }
    23 
    24 int main(void)
    25 {
    26     int n;
    27     ///find the primes from 1 to n(n<=N)
    28     scanf("%d", &n);
    29     is_prime(n);
    30     for(int i=1; i<=n; i++)
    31         if(flag[i]==yes)
    32             printf("%8d", i);
    33     printf("
    ");
    34     return 0;
    35 }

    素数打表:

     1 #define N   1000001
     2 #define yes '1'
     3 #define no  '0'
     4 char flag[N];
     5 int p[80000];
     6 void is_prime()
     7 {
     8     int i, j ;
     9     memset(flag, yes, sizeof(flag));
    10     flag[0]=flag[1]=no;
    11     int len=sqrt(N)+1;
    12     for(i=2; i<len; i++)
    13     {
    14         if(flag[i]==no) continue;
    15         for(j=i+i; j<=N; j+=i)
    16             flag[j]=no;
    17     }
    18  
    19     for (i=2;i<=N;i++)
    20         if (flag[i]==yes)
    21         {
    22             T++;
    23             p[T]=i;
    24         }
    25 }

    总结 : 对于素数的题目,几乎都会用到前面三种。但素数表还是自己写吧。背下来的迟早会忘。至少要自己写的出来。

  • 相关阅读:
    CodeForces 203C Photographer
    CodeForces 190A Vasya and the Bus
    CodeForces 187A Permutations
    Zoj3762 等待解决
    LA4080最短路树的应用
    uva10917 dij单源最短路预处理+构造新图(DAG)+求图上路径数
    uva11374 dij单源最短路+枚举
    LA3713 2-sat(用到两种矛盾关系)
    【算法总结】2-sat中对象的5种矛盾关系及其连边方式
    LA3211二分答案+2-sat+总结的此类问题统一建模方法
  • 原文地址:https://www.cnblogs.com/firstrate/p/3211056.html
Copyright © 2020-2023  润新知