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

    求素数的筛法是公元前厄拉多赛提出来的:对于一个大整数x,只要知道不超过sqrt(x)的所有素数p,划去所有p的倍数2p, 3p, ……剩下的整数就是不超过x的全部整数

    代码示例: 求[1..100]的所有素数:

    program project1;
    //  求素数的筛法是公元前厄拉多赛提出的
    //  对于一个大整数x,只要知道不超过sqrt(x)的所有素数p,
    //  划去所有p的倍数2p, 3p, ……剩下的整数就是不超过x的全部整数
    var
      i, j: integer;
      prime: array[0..100] of integer;
    begin
      fillchar(prime, sizeof(prime), 0);
      //如果i不是素数的 将prime[i]置1,最后prime[i]是0的就是素数
      i := 4;
      while i <= 100 do
      begin
        prime[i] := 1;
        Inc(i, 2);
      end;
      for i := 3 to trunc(sqrt(100)) do
        if prime[i] = 0 then
        begin
          j := i * i;
          while j <= 100 do
          begin
            prime[j] := 1;
            Inc(j, i);
          end;
        end;
      j:=0;
      for i := 2 to 100 do
      begin
        if prime[i]=0 then
        begin
          write(i, ' ');
          inc(j);
          if j mod 10 = 0 then
          writeln;
        end;
      end;
      readln;
    end.
    效果:
    mx36E22

    另:求素数还有: 试商判别法

    对于奇数i, 若存在某个j(在[3..sqrt(i)]范围内)能整除i, 则i不是素数, 否则i是素数。

    代码示例: 求[1..100]的所有素数:

    program project2;
    
    var
      i, j, num: integer;
      isprime: boolean;
    begin
      Write(2, ' ');
      num := 1;
      i := 3;
      while i < 100 do
      begin
        isprime := True;
        for j := 3 to trunc(sqrt(i)) do
          if i mod j = 0 then
          begin
            isprime := False;
            break;
          end;
        if isprime then
        begin
          Write(i, ' ');
          Inc(num);
          if num mod 10 = 0 then
            writeln;
        end;
        Inc(i, 2);
      end;
      readln;
    end.

    效果:

    mx3877C

  • 相关阅读:
    POJ 3093 Margaritas on the River Walk(背包)
    BZOJ 2287 【POJ Challenge】消失之物(DP+容斥)
    WC2017 Day1
    WC2017 Day0
    WC2017 Conclusion
    WC2017 Day6
    UOJ #58 糖果公园
    WC2017 Day5
    codevs 1946 阿狸的打字机
    HDU 2457 DNA_repair
  • 原文地址:https://www.cnblogs.com/wouldguan/p/2376405.html
Copyright © 2011-2022 走看看