快速找质数

xiaoxiao2021-02-28  82

给定1-1000000的数,快速找出质数

/* * 文件名:FindPrime .java * 版权:Copyright 2007-2017 517na Tech. Co. Ltd. All Rights Reserved. * 描述: FindPrime .java * 修改人:peiyu * 修改时间:2017年5月5日 * 修改内容:新增 */ package com.websocket.controler; import java.util.ArrayList; import java.util.List; public class FindPrime { public static void main(String[] args) { findPrime1(10000000); findPrime2(10000000); findPrime3(10000000); } public static void findPrime1(int n) { double start = System.currentTimeMillis(); List<Integer> primeArray = new ArrayList<Integer>(); primeArray.add(2); primeArray.add(3); int k = 0; for (int j = 5; j < n;) { for (int i = 0; i < primeArray.size(); i++) { if (primeArray.get(i) * primeArray.get(i) > j) { primeArray.add(j); break; } else if (j % primeArray.get(i) == 0) { break; } } if (k % 2 == 0) { j += 2; } else { j += 4; } k++; } System.out.println(primeArray.size()); System.out.println("程序运行时间为" + (System.currentTimeMillis() - start)); } public static List<Integer> findPrime2(int n) { double start = System.currentTimeMillis(); List<Integer> primes = new ArrayList<Integer>(); primes.add(2); for (int i = 3; i <= n; i += 2) { int tmp = (int) Math.sqrt(i) + 1; for (int j = 2; j <= tmp; j++) { if (i % j == 0) break; if (j == tmp) primes.add(i); } } System.out.println(primes.size()); System.out.println("程序运行时间为" + (System.currentTimeMillis() - start)); return primes; } public static List<Integer> findPrime3(int n) { double start = System.currentTimeMillis(); List<Integer> primes = new ArrayList<Integer>(); primes.add(2); for (int i = 3; i <= n; i += 2) { for (int j = 0; j < primes.size(); j++) { if (i % primes.get(j) == 0){ break; } if (j == primes.size() - 1) { primes.add(i); break; } } } System.out.println(primes.size()); System.out.println("程序运行时间为" + (System.currentTimeMillis() - start)); return primes; } }

结果:

664579 程序运行时间为1849.0 664579 程序运行时间为9559.0 664579 程序运行时间为1620130.0

数据足够大时,第一种方式最快,最后一种方式最慢

转载请注明原文地址: https://www.6miu.com/read-24574.html

最新回复(0)