• 找小于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] + " ");
            }
        }
    
    }
  • 相关阅读:
    单例
    Label自适应高度
    通知中心(以夜间模式为例)
    ios VFL屏幕自适应
    网络请求数据(同步POST,异步POST)
    linux 设备文件
    linux 文件存取 软硬联接的区别
    linux 磁盘管理与文件系统
    linux开机过程
    Build Antlr4 projects with eclipse java project template.
  • 原文地址:https://www.cnblogs.com/zhengxingpeng/p/6674653.html
Copyright © 2020-2023  润新知