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] + " ");
            }
        }
    
    }
  • 相关阅读:
    net core3.1 + electron 9.31.2 项目初始化
    DEV Express控件VScorllBar控件使用
    背包系统学习笔(tu)记(cao)
    C#应该掌握的一些东西
    服务器之间数据库拷贝
    photoshop AdobeCS6分享
    Random的实现原理
    C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)
    jQuery validate验证控件remote缓存bug
    litrpa1.4版本正式发布了
  • 原文地址:https://www.cnblogs.com/zhengxingpeng/p/6674653.html
Copyright © 2011-2022 走看看