zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    Idea初始化Vue项目
    为什么在vue的组件中,data要用function返回对象呢
    SpringBoot+RabbitMQ 快速入门
    Neo4j入门-CQL
    记一次坑爹的websocket Response code was not 101: 404的问题
    Neo4j入门-开始使用
    关于乱码问题的一些思考
    搭建apache2.4+php7+mysql+phpmyadmin
    oracle dba 关闭 002
    oracle 正则表达式 非字母 非数字
  • 原文地址:https://www.cnblogs.com/firstrate/p/3211056.html
Copyright © 2011-2022 走看看