题目:
输入一个数n,输出1-n(不包含n)的所有质数。
输入样例:5
输出样例:
2
3
暴力;输出:
package com.item.action; import java.io.BufferedWriter; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Scanner; /** * * @author hongmuxiangxun 红目香薰 付文龙 老师付 laoshifu * */ public class demo16 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.close(); // 向文本输出流打印对象 PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); for (int i = 2; i < num; i++) { boolean isf = true; for (int j = 2; j < i; j++) { if (i % j == 0) { isf = false; break; } } if (isf) { pw.println(i); } } pw.close(); } }
时间计算(测试数据10W):
package com.item.action; import java.io.BufferedWriter; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Scanner; /** * * @author hongmuxiangxun 红目香薰 付文龙 老师付 laoshifu * */ public class demo16 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.close(); long start = System.currentTimeMillis(); // 向文本输出流打印对象 PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); for (int i = 2; i < num; i++) { boolean isf = true; for (int j = 2; j < i; j++) { if (i % j == 0) { isf = false; break; } } if (isf) { pw.println(i); } } long end = System.currentTimeMillis(); pw.println("消耗时间:"+(end-start)+"毫秒"); pw.close(); } }
优化(测试数据10W):
只要把循环一直从2尝试到根号x就可以,可以发现,一个数的两个因数中,毕然有一个小于等于根号x,一个大于等于根号x。
例如100的因数有:1和100,2和50,4和25,5和20,10和10。所以只要从2尝试到根号x,如果都没有被整除,就是素数,否则就不是。
package com.item.action; import java.io.BufferedWriter; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Scanner; /** * * @author hongmuxiangxun 红目香薰 付文龙 老师付 laoshifu * */ public class demo16 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.close(); long start = System.currentTimeMillis(); // 向文本输出流打印对象 PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); for (int i = 2; i < num; i++) { boolean isf = true; for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { isf = false; break; } } if (isf) { pw.println(i); } } long end = System.currentTimeMillis(); pw.println("消耗时间:"+(end-start)+"毫秒"); pw.close(); } }
很多规律自己并不是很容易找到的,建议在网上查,你不可能记得天底下所有有用的公式与技巧,很多都是推演出来的,那么,如果有现成的正确的内容,并且能够解决实际问题,直接那来用就行,效率会更高一些,不要总想着你是天下无敌的。