`
366674654
  • 浏览: 8795 次
文章分类
社区版块
存档分类
最新评论

java求质数(素数)的快速算法

阅读更多
	public static List<Integer> ListPrime(int n) {
		/*
		 * false为质数,true为合数
		 */
		boolean[] primeList = new boolean[n + 1];

		for (int i = 2; i <= n; i++) {
			if (!primeList[i]) {

				int j = i * i;

				if (j > n) // 所有合数都已被标记
					break;
				if (i > 2) {
					/*
					 * 将所有能被此质数整除的奇数标记为合数
					 */
					while (j <= n) {
						primeList[j] = true;
						j = j + i + i;
					}
				} else {
					/*
					 * 将所有大于2的偶数标记为合数
					 */
					while (j <= n) {
						primeList[j] = true;
						j = j + i;
					}
				}
			}
		}
		List<Integer> listPrime = new LinkedList<Integer>();
		if( n > 1 )
			listPrime.add(2);
		for (int i = 3; i <= n; i += 2) {
			if (!primeList[i]) {
				listPrime.add(i);
			}
		}
		System.out.println(listPrime.size());
		return listPrime;
	}
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics