JAVA面试题:输出100以内所有的素数
转载:https://www.cnblogs.com/onway/archive/2012/11/15/2771912.html
Java输出1-100中所有的素数
很多人笔试时都会遇到这个问题,小农也试着写了一下(_)。
概念:所谓质数就是只能被1和它本身整除的数。那么对于某一个数a,可以试着让它除以a-1......2,如果有任意一次除法的余数为零,这个数a就不是质数。
方法一:
完全根据质数的定义,我称这种方法叫做“笑而不语最直接法”。该方法完全可以输出正确结果,但这肯定不是面试官想要的
public static void test4() {
System.out.println(2);
System.out.println(3);
System.out.println(5);
System.out.println(7);
for(int i=10;i<=100;i++){
if(i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0){
System.out.println(i);
}
}
}
方法二:
思路:
1、这个程序用了两层循环。外层循环列举从2到100之间的每一个整数(作为被除数),
然后在内层循环中用从2到它之间的数去除它,如果找到了一个能够整除它的数,内层循环将立即跳出(此时j小于i)。
如果一直没有找到能够整除它的数,则当内层循环将2到它之间的所有数都尝试过一遍之后,内层循环也跳出(此时j等于i)。
2、等到内层循环跳出之后,程序接着判断j是否大于等于i,如果是(上面第二种情况),
表明这个数是质数,于是将这个数打印出来并计算到累加和中去;如果不是(上面第一种情况),表明这个数不是质数。
public static void test2() {
int i, j;
for (i = 2; i <= 100; i++) {
for (j = 2; j < i; j++) {
if (i % j == 0)
break;
}
if (j >= i)
System.out.println(i);
}
}
方法三:
思路:
1、外层循环作为被除数,内层循环作为除数。
2、定义一个开关,标记外层循环数是否为质数。默认为 true
3、内层循环结束,如果开关还为true。即被除数为质数,打印出来
public static void test3() {
for (int i = 2;i<= 100;i++){//1既不是质数也不是和数,所以从2开始
boolean k = true;
for (int n = 2; n < i; n++) {
if (i % n == 0) {
k = false;
break;
}
}
if(k){
System.out.print(i + " ");
}
}
}
升级版:
如果能把上两种方法写出来,确实已经很好了。但有没有更优的代码去实现?
试着去想这些问题:
1、外层for循环有必要执行100次吗?
除了2所有的偶数都不是质数,那么能不能只遍历奇数。
代码:for (int i = 3; i < 100; i+=2) //i一次循环自增2
考虑到这个问题,for循环就少遍历了50次。效率就提升了一倍
2、内层for循环能不能也做些优化呢?
内层for循环作为 除数(除数从3 到 被除数-1),通过规律发现
除数只需要从3 到 100 就行了。
public static void test4() {
boolean bool;
for (int i = 3; i < 100; i+=2) {
bool = true;
for (int j = 3; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
bool = false;
break;
}
}
if (bool)
System.out.print(i + " ");
}
}
用最后一种方法,是不是更会博得面试官的青睐呢
JAVA面试题:输出100以内所有的素数的更多相关文章
- 【Python实践-7】输出100以内的所有素数
#输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). i= l=[] : k= ,i): : k=k+ : l.append(i) i=i+ print(" ...
- java练习题:输出100以内与7有关的数、百马百担、打分(去掉最高、最低分)、二分法查找数据
1.输出100以内与7有关的数 注: 这些数分为三类:(1)7的倍数,(2)个位数字是7的数,(3)十位数字是7的数 int i=1; System.out.println("输出100以内 ...
- 求解100以内的所有素数(问题来自PythonTip)
求解100以内的所有素数 (AC/Submit)Ratio(4615|22542)20.47% 描述: 输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). a=[2 ...
- 1.2输出100以内的素数&输出前100个素数。
输出100以内的素数只是一个嵌套,在1.1的基础上添加一层循环,只需要注意从2开始,并且变量需要换一个. #include<stdio.h> int main() { ; ; i < ...
- PHP面试题之实现输出100以内的质数
最近求职时的其中一道面试题: 求100之内的质数 <? //求100以内质数 for ($i = 1; $i <= 100; $i++) { $k = 0; for ($j = 1; $j ...
- java代码--------随机输出100个随机数,要求每行10个数
总结:不敢爱你么开口 package com.sads; ///实现随机输出100个数字,数字是0到9之间,每行输出10个 public class Wss { public static void ...
- 用js编程输出100以内所有的质数和个数(提示:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数都是质数)
<script type="text/javascript"> for(var i = 3; i <= 100; i ++) {//控制2-100所有的数i fo ...
- Java简单算法--求100以内素数
package cn.magicdu.algorithm; /** * 打印素数 * * @author xiaoduc * */ public class Prim { public static ...
- Java优化之输出十万以内的质数
(1)未经优化时所耗费的时间: public class PrimeNumber { public static void main(String[] args) { long start = Sys ...
随机推荐
- 无需扫描即可查找和攻击域SQL Server (SPN)
无扫描SQL Server发现简介 当您没有凭据或正在寻找不在域中的SQL Server时,使用各种扫描技术来查找SQL Server可能非常有用.但是,此过程可能很嘈杂,耗时,并且可能由于子网未知, ...
- IE & 自定义滚动条 & scroll
IE & 自定义滚动条 & scroll 请问这种在 IE 下的自定义滚动条,是如何实现的? https://fairyever.gitee.io/d2-admin-preview/# ...
- web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造)
web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造) XSS(跨站脚本攻击)和CSRF(跨站请求伪造) Cross-site Scripting (XSS) h ...
- react hooks & props change & pagination current bug
react hooks & props change & pagination current bug multi tables & pigination bug & ...
- EventEmitter & custom events & sub/pub
EventEmitter & custom events & sub/pub https://repl.it/@xgqfrms/PPLabs-frontend-answers // 5 ...
- 疯狂的String
本文转载自疯狂的String 导语 在java中字符串是我们比较常用的一个类型,字符串是不可变的,类被声明为final , 存储字符的char[] value数据也被声明为final ,我们对Stri ...
- python常用内置方法index\extend\count\reverse\sort
定义列表:(有2个值相同) a = ['XiaoBao','aiaoHao','biaoLiao','ciaoQing','eiaoLi','QiBao','biaoLiao'] 列表的索引: fir ...
- mybatisPlus中的模糊查询问题
不能查询中文 记得在数据库的配置中写明编码格式characterEncoding=utf-8
- 翻译:《实用的Python编程》02_06_List_comprehension
目录 | 上一节 (2.5 collections模块) | 下一节 (2.7 对象模型) 2.6 列表推导式 一个常见的任务是处理列表中的项(译注:元素).本节介绍列表推导式,完成此任务的强大工具. ...
- Hive 填坑指南
Hive 填坑指南 目录 Hive 填坑指南 数据表备份 数据表备份 方法1:create table 表名_new as select * from 原表 create table 表名_new a ...