基础算法练习200题16、打印质数

简介: 基础算法练习200题16、打印质数

题目:


输入一个数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();
  }
}

image.png



时间计算(测试数据10W):


package com.item.action;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
/**
 * 
 * @author hongmuxiangxun&nbsp;红目香薰&nbsp;付文龙&nbsp;老师付&nbsp;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();
  }
}

image.png



优化(测试数据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&nbsp;红目香薰&nbsp;付文龙&nbsp;老师付&nbsp;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();
  }
}


image.png


很多规律自己并不是很容易找到的,建议在网上查,你不可能记得天底下所有有用的公式与技巧,很多都是推演出来的,那么,如果有现成的正确的内容,并且能够解决实际问题,直接那来用就行,效率会更高一些,不要总想着你是天下无敌的。

相关文章
|
机器学习/深度学习 算法
【算法基础】筛质数
【算法基础】筛质数
63 0
|
6月前
|
人工智能 算法 C++
c++算法学习笔记 (17) 质数
c++算法学习笔记 (17) 质数
|
6月前
|
算法
算法题解-计数质数
算法题解-计数质数
|
6月前
|
机器学习/深度学习 算法 vr&ar
☆打卡算法☆LeetCode 204. 计数质数 算法解析
☆打卡算法☆LeetCode 204. 计数质数 算法解析
|
算法
算法创作|质数计数问题解决方法
算法创作|质数计数问题解决方法
49 0
|
算法 前端开发 索引
前端算法-质数计数
前端算法-质数计数
|
算法
数据结构115-普通判断质数算法
数据结构115-普通判断质数算法
58 0
数据结构115-普通判断质数算法
|
算法
数据结构117-高效判断质数算法
数据结构117-高效判断质数算法
71 0
数据结构117-高效判断质数算法
|
算法
数据结构118-高效判断质数算法
数据结构118-高效判断质数算法
63 0
|
算法 C++
算法基础系列第四章——数论之质数与约数(2)
算法基础系列第四章——数论之质数与约数(2)
121 0
算法基础系列第四章——数论之质数与约数(2)