输出1-100内的质数(素数)

参考https://blog.csdn.net/yearningseeker/article/details/49964127

质数概念:所谓质数就是只能被1和它本身整除的数。那么对于某一个数a,可以试着让它除以a-1......2,如果有任意一次除法的余数为零,这个数a就不是质数。

方法1:完全根据质数的定义,我称这种方法叫做“笑而不语最直接法”。该方法完全可以输出正确结果,但这肯定不是面试官想要的

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);        }    }}

方法2:

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);    }}

方法3:


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 到 除数的开平方根数 就行了。


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 + " ");    }}
 

原文地址:https://www.cnblogs.com/lijingran/p/9047867.html

时间: 2024-08-30 16:29:55

输出1-100内的质数(素数)的相关文章

Java小练习 输出100内所有质数

分析:所谓质数,就是不能被除了1和自身外的数所整除的数 如:这个数是i,那么对于从2开始到i的数j,有i%j!=0,直到i==j时才有i%j==0; 从这个思路出发,算法如下 1 public class printPrime{ 2 public static void main(String args[]) { 3 for (int i = 2; i < 101; i++) { 4 int j = 2; 5 while (i % j != 0) { 6 j++; 7 } 8 if (i ==

判断100以内的质数(素数)

public class Demo3 { public static void main(String[] args) { boolean b; for (int i = 2; i < 100; i++) { //遍历2-100的所有数 b = true; int k = (int) Math.sqrt(i); //开平方 for (int j = 2; j <= k; j++) { if (i % j == 0) { b = false; break; } } if (b) { System

输出1~100内前5个可以被3整除的数

1 private void Form2_Load(object sender, EventArgs e) 2 { 3 int num = 0, i = 1; 4 while (i <= 100) 5 { 6 if (i % 3 == 0) 7 { 8 MessageBox.Show(i + ""); 9 num++; 10 11 } 12 13 if (num == 5) //输出5个数之后,语句停止 14 { 15 break; 16 } 17 18 i++; 19 } 20

C语言 &#183; 打印1~100间的质数(素数)

算法提高 c++_ch02_04 时间限制:1.0s   内存限制:256.0MB 问题描述 输出1~100间的质数并显示出来.注意1不是质数. 输出格式 每行输出一个质数. 2 3 ... 97 注意:素数又称质数. 1 #include<stdio.h> 2 #include<math.h> 3 int main(){ 4 int m,i,k,h=0,leap=1; 5 for(m=2;m<=100;m++){ 6 k=sqrt(m+1); 7 for(i=2;i<

【Python实践-7】输出100以内的所有素数

1 #输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). 2 i=2 3 l=[] 4 while i<100: 5 k=0 6 for j in range(2,i): 7 if i%j==0: 8 k=k+1 9 if k==0: 10 l.append(i) 11 i=i+1 12 print(" ".join(str(i) for i in l)) 知识点: 1.素数,又称质数,定义为在大于1的自然数中,除了1和它本身以外不再有其他因数

8.求出100~230之间所有素数之和,先在屏幕上输出,再求和

#include <iostream>#include <cmath>//可以使用一些内置函数using namespace std;int isprime(int x);int main(){    int m,n;    for(m=101;m<230;m++)    {       if(isprime(m))            cout<<m<<endl;    }    for(m=101;m<230;m++)    {     

求100内质数的个数

// 求100内质数的个数 非容斥 #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> using namespace std; int n,sum; int main() { scanf("%d",&n); for(int i=1;i<=

「C语言」「算法」输出指定范围内的素数

#include <stdio.h> //输出指定范围内的素数 int main(){ int a,b; int i,j; printf("请输入整数范围并用空格隔开:\n"); scanf("%d%d",&a,&b); for(i=a;i<=b;i++){ for(j=2;j<=i-1;j++) { if(i%j==0) break; } if(j>=i-1) printf("%d ",i); }

输出1~100之间的所有质数

/* 输出1~100之间的所有质数 只能被1和本身整除的数 (即:从2开始到小于这个数本身结束的自然数中,没有能被这个数除尽的数存在) */ class  TestZhiShu {     public static void main(String[] args)      {          boolean flag=true;         long start=System.currentTimeMillis();//获取当前时间(ms)         for(int i=2; i

java学习日记-基础-列出2~100内的素数

素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public class Sushu { public static void main(String[]args){ String str="2 3 5 7 "; for(int i=2;i<=100;i++){ if(i%2==0||i%3==0||i%5==0||i%7==0 ){ //:逻辑判断,筛选 continue;