zoukankan      html  css  js  c++  java
  • 求一范围内的素数(质数)

    有时去面试时会问到这样的问题,说难也不难,说不难也难,其实理清思路问题就不大了。

    根据网上所谓的最佳方案,我们来理顺下它的思路;

    素数也叫质数,即只能被1和自身整除的数就叫质数,能被其它的数整除的数叫合数,一个合数可以分解为二个或多个质数,即多个质数的乘积就为合数。

    算法的思路:

          1.建立给定数据的布尔数组,把数组下标从2开始的全记为True;即每个数组对应一个值

               2.求最大数值的开平方,即此值最大的合数为开平方的值,

        3.数组对应的值能被开平方范围内的值所整除就说明此值不是质数,对应的数据设置为false;

    以下代码为Delphi代码,用listbox来显示所有的质数:

    procedure TForm1.DisplayAllValue(n: integer);
    var
     i,j,k:Integer;
     bArr:TArray<Boolean>;
    begin
      {下标从0开始,但0处值不计数值,数组多加一个,防止溢出}
      SetLength(bArr,n+1);
      for i := 1 to n+1 do
        bArr[i]:=True;
      k:=Floor(Sqrt(n));
      for i := 2 to k do
      begin
        j:=i;
        while j*i<=n do
        begin
          if bArr[i] then
            bArr[j*i]:=False; //是j的倍数就为非质数
          j:=j+1;
        end;
      end;
    
      {注意范围,最后一个数不要取,因为我们原来多加一个数}
      for i := 2 to n do
         if bArr[i] then
           ListBox1.Items.Add(IntToStr(i));
    end;
    

      

  • 相关阅读:
    CSS选择器的优先级
    SQL Server——死锁查看
    VS2008激活找不到密匙输入框
    迷茫的周一
    SQL Server 2012使用日常
    Excel默认去除开头的0
    PDA日常问题
    第一个.NET小程序
    网站发布
    IIS配置——常见问题
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/4569195.html
Copyright © 2011-2022 走看看