【编程马拉松】【001-NowCoder猜想】
来源:互联网 发布:centos 搭建svn服务器 编辑:程序博客网 时间:2024/05/16 08:06
【编程马拉松算法目录>>>】
【001-NowCoder猜想】【工程下载>>>】
1 题目描述
nowcoder在家极度无聊,于是找了张纸开始统计素数的个数。设函数f(n)返回从1-n之间素数的个数。nowcoder 发现:
f(1) = 0
f(10) = 4
f(100) = 25
…
满足g(m) = 17 * m^2 / 3 - 22 * m / 3 + 5 / 3
其中m为n的位数。
他很激动,是不是自己发现了素数分布的规律了!
请你设计一个程序,求出f(n),来验证nowcoder是不是正确的,也许还可以得诺贝尔奖呢。^_^
1.1 输入描述:
输入包括多组数据。
每组数据仅有一个整数n (1≤n≤10000000)。
1.2 输出描述:
对于每组数据输入,输出一行,为1->n(包括n)之间的素数的个数。
1.3 输入例子:
110651000
1.4 输出例子:
041825
2 解题思路
采用标记法求素数个数,假如输入是100,求100的平方根,得到10,再开辟大小为101的数组空间,将先将2倍数,但不包括2标记为非素数。现找下一个未标记的素数3,将3倍数,但不包括3标记为非素数。以此类推直到找到的素数大于10为止。最后统计未标记的数,那些数就是所求的素数。图2-1是以内的质数求解方法。
图2-1 100 以内的质数求解
3 算法实现
import java.util.Scanner;/** * Author: 王俊超 * Date: 2016-01-13 13:54 * CSDN: http://blog.csdn.net/derrantcm * Github: https://github.com/Wang-Jun-Chao * All Rights Reserved !!! */public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);// Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt")); while (scanner.hasNext()) { int n = scanner.nextInt(); if (n >= 1 && n <= 10_000_000) { System.out.println(guess(n)); } } scanner.close(); } /** * 求[1, n]中素数的个数,使用标记法 * * @param n 最大的范围 * @return 素数个数 */ private static int guess(int n) { // 标记是否是素数 // false表示是素数 // true表示不是素数 boolean[] mark = new boolean[n + 1]; mark[0] = true; mark[1] = true; // 标记质数 for (int i = 2; i < mark.length; i++) { // i是质数 if (!mark[i]) { for (int j = 2 * i; j < mark.length; j += i) { mark[j] = true; } } } // 统计质数个数 int count = 0; for (int i = 2; i < mark.length; i++) { if (!mark[i]) { count++; } } return count; }}
4 测试结果
5 其它信息
因为markddow不好编辑,因此将文档的图片上传以供阅读。Pdf和Word文档可以在Github上进行【下载>>>】。
2 0
- 【编程马拉松】【001-NowCoder猜想】
- NowCoder猜想
- nowcoder马拉松--包含一
- NowCoder猜想--牛客网题
- NowCoder猜想---统计n以内的素数个数
- 编程马拉松总结
- 换零钱---编程马拉松
- 鹊桥相会---编程马拉松
- 编程马拉松:电话号码
- 【编程马拉松算法目录】
- 【编程马拉松】【012-Hero】
- 编程马拉松17C
- 我的编程马拉松
- 人工智能编程马拉松
- 编程马拉松----走迷宫
- 2013腾讯编程马拉松初赛
- 【编程马拉松】【002-分遗产】
- 【编程马拉松】【003-素数和】
- Eclipse下修改SVN地址
- DDL、DML和DCL的理解
- CSS动画--页面特效
- Android 列表播放视频和浮动播放窗口
- LeetCode 218. The Skyline Problem
- 【编程马拉松】【001-NowCoder猜想】
- CodeForces667APouring Rain
- HTML5-Canvas绘图基础
- HTML5-Canvas绘图几何图形
- HTML5-Canvas绘图字符串
- 【CodeForces】[673B]Problems for Round
- codeforces 226D The table(贪心+构造)
- java反射
- bzoj 4555:[Tjoi2016&Heoi2016]求和 多项式求逆