zoukankan      html  css  js  c++  java
  • 找小于N 的所有质数

     笔试题目当中,找素数出现的几率有点大。昨天就做了一个,感觉不是很难,但可以考查程序员的数学和编码功底。

         用嵌套循环来实现是很理想的,怎样减少循环的次数?怎样求出小于N的所有质数?

         不可能将一个数除与所有小于它的数字,只要检查到N的平方根就好了。但直接开根号还有个精度的问题。这个可能会产生误差。

         索性将判断条件写成 i*i<=N ,道理也是很简单的 i 大于N 的平方根,在检查 第一个 i 除数 N 之前可以先检查 小于第二个 i 是否可以 整除 N。

        下面自己敲的求素数:

         

    复制代码
    import java.util.ArrayList;
    
    public class Prime {
    
        public static int[] findPrime(final int max) {
            int[] prime = new int[max + 1];
            ArrayList list = new ArrayList();
        
            // 两个嵌套循环 ,赋值不是质数
            for (int j = 2; j * j <= max; j++) {
                for (int k = 2*j; k <= max; k++) {
                    if (k % j == 0) {
                        //不是质数 数组对应赋值为1
                        prime[k] = 1;
                    }
                }
            }
            for (int i = 2; i < max; i++) {
                //因为JAVA数组默认赋值为整数“0”,所以所有是质数的经过上面的嵌套循环数组所对应的值是没有发生的
                if (prime[i] == 0) {
                    list.add(new Integer(i));
                }
            }
        //将list 转换为数组返回
            int[] p = new int[list.size()];
            for (int i = 0; i < list.size(); i++) {
                p[i] = (Integer) list.get(i);
            }
            return p;
    
        }
    
        public static void main(String[] args) {
            int[] prime = Prime.findPrime(1000);
            for (int i = 0; i < prime.length; i++) {
                System.out.print(prime[i] + " ");
            }
        }
    
    }
  • 相关阅读:
    ZooKeeper 的选举机制,你了解多少?
    验证码无法显示:Could not initialize class sun.awt.X11GraphicsEnvironment 解决方案
    docker-compose入门
    Fabric中LevelDB转CouchDB
    查看证书内容
    Hyperledger Fabric数据存储结构
    Fabric中数据存储
    Pytest学习(二十二)- allure之@allure.link()、@allure.issue()、@allure.testcase()的使用
    Sqoop
    drop、truncate和delete的区别
  • 原文地址:https://www.cnblogs.com/zhengxingpeng/p/6674653.html
Copyright © 2011-2022 走看看