链家笔试:素数打表
来源:互联网 发布:知乎机构账号怎么注销 编辑:程序博客网 时间:2024/05/16 19:54
素数打表
题目描述:求第n个素数(1 <= n <= 10000)
1、方式1
import java.util.Scanner;public class Main { public static void main(String[] args) { boolean[] visited = new boolean[1000000]; int n = 200000; //足够产生10000个素数 int[] prime = new int[n]; int num = 0; for(int i = 2; i < n; i++) { if(!visited[i]) { prime[num++] = i; } for(int j = i; j <= n; j += i) { visited[j] = true; } } Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int k = sc.nextInt(); System.out.println(prime[k-1]); } sc.close(); }}
2、方式2
import java.util.Scanner;public class Main { public static void main(String[] args) { boolean[] visited = new boolean[1000000]; int n = 200000; //足够产生10000个素数 int[] prime = new int[n]; int num = 0; for(int i = 2; i < n; i++) { if(!visited[i]) { prime[num++] = i; } // ----------注意这里发生改变--------------- for(int j = 0; j < num && i * prime[j] < n; j++) { visited[i * prime[j]] = true; /* * 此处是重点,避免了很多的重复判断, * 比如i=9,现在素数是2,3,5,7,进入二重循环, * visit[2*9]=1;visit[3*9]=1;这个时候9%3==0,要跳出。 * 因为5*9可以用3*15来代替,如果这个时候计算了, * i=15的时候又会被重复计算一次,所以这里大量避免了重复运算。 * 参考自:http://blog.csdn.net/u011560507/article/details/10032607 */ if(i % prime[j] == 0) break; } } Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int k = sc.nextInt(); System.out.println(prime[k-1]); } sc.close(); }}
阅读全文
0 0
- 链家笔试:素数打表
- 素数判定 - 素数打表
- 打素数表
- 素数打表
- 打素数表
- 高效素数打表
- 素数打表
- 素数打表
- 素数打表
- 素数打表
- 高效素数打表
- 打素数表
- 打素数表?
- 高效素数打表
- 素数打表
- 素数打表
- 快速打素数表
- 打素数表
- centos安装php php-fpm 以及 配置nginx
- 报错:/usr/sbin/smartctl not found.error:error: install: %pre scriptlet failed (2), skipping cvuqdisk
- Java如何给极光推送发消息
- windows7/10安装vagrant
- android 一个界面管理多种状态方案
- 链家笔试:素数打表
- ubuntu下qt debug一直处于lauching Debugger(启动debugger)
- 基本数据类型参数传递与引用型数据类型参数传递
- geohash编码 (腾讯2017校招开发工程师试卷一)
- 前台js页面字体滚动划出播放
- 图结构练习——BFSDFS——判断可达性
- BZOJ 4644: 经典傻逼题 线段树分治 线性基
- 网络图谱(个人记录)
- jenkins安装部署全过程