算法 埃氏筛法求素数个数
来源:互联网 发布:阿里云短信发送频率 编辑:程序博客网 时间:2024/06/05 05:39
思路原理
要得到自然数n以内的全部素数,必须把不大于根n的所有素数的倍数剔除,剩下的就是素数。
给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去……。
题目:
设函数f(n)返回从1-n之间素数的个数。nowcoder 发现:f(1) = 0f(10) = 4f(100) = 25...满足g(m) = 17 * m^2 / 3 - 22 * m / 3 + 5 / 3其中m为n的位数。他很激动,是不是自己发现了素数分布的规律了!请你设计一个程序,求出f(n),来验证nowcoder是不是正确的,也许还可以得诺贝尔奖呢。^_^输入描述:输入包括多组数据。每组数据仅有一个整数n (1≤n≤10000000)。输出描述:对于每组数据输入,输出一行,为1->n(包括n)之间的素数的个数。示例1输入110651000输出041825
算法
package com.hqq;import java.util.ArrayList;import java.util.List;import java.util.Scanner;/** * Main * Created by heqianqian on 2017/7/7. */public class Main { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int prime = scanner.nextInt(); if (prime <= 0) { break; } list.add(prime); } for (int i = 0; i < list.size(); i++) { System.out.println(countPrime(list.get(i))); } } public static int countPrime(int prime) { boolean[] arr = new boolean[prime + 1]; //true表示是素数 False表示非素数 arr[0] = arr[1] = false; for (int i = 2; i <= prime; i++) { arr[i] = true; } for (int i = 2; i <= Math.sqrt(prime); i++) { if (arr[i]) { for (int j = i; i * j <= prime; j++) { arr[j * i] = false; } } } int count = 0; for (int i = 2; i <= prime; i++) { if (arr[i]) { count++; } } return count; }}
阅读全文
0 0
- 算法 埃氏筛法求素数个数
- 埃氏筛法求素数个数
- 计算一定范围内素数个数的算法
- 素数个数
- 素数个数
- 素数个数
- 高端算法 求a,b之间素数的个数
- 【算法】寻找1000000000(十亿)内素数并统计个数
- Meisell-Lehmer算法(求1...n范围内的素数个数)
- 算法题-列出x-n之间素数并统计个数
- 素数个数&梅森素数
- 求素数的个数
- 素数个数的位数
- 素数个数的位数
- 筛法求素数个数
- 求素数个数
- wikioi1439统计素数个数
- 循环素数个数
- 6000G精品IT教程资源合集 java分布式高并发架构师视频教程 Python教程视频合集 云计算大数据视频教程
- 1294: 简单统计
- 算法设计与分析 合并排序的递归实现算法
- Cocos2dx------从json文件读取数据
- SQLite约束以及连接
- 算法 埃氏筛法求素数个数
- Kotlin入门(4)声明与操作数组
- 如何快速转载CSDN中的博客
- ARP局域网断网攻击原理分析及演示
- 打包jar插件配置 java -jar xxx.jar可执行
- 史上最全的Maven Pom文件标签详解
- 常见的并行程序设计问题的解决方法
- 栈:栈、队列基本概念
- servlet之cookied/session深入浅出(cookie)