輸出1-100之內的所有質數
方法一:
思路:
1、這個程式用了兩層迴圈。外層迴圈列舉從2到100之間的每一個整數(作為被除數),
然後在內層迴圈中用從2到它之間的數去除它,如果找到了一個能夠整除它的數,內層迴圈將立即跳出(此時j小於i)。
如果一直沒有找到能夠整除它的數,則當內層迴圈將2到它之間的所有數都嘗試過一遍之後,內層迴圈也跳出(此時j等於i)。
2、等到內層迴圈跳出之後,程式接著判斷j是否大於等於i,如果是(上面第二種情況),
表明這個數是質數,於是將這個數打印出來並計算到累加和中去;如果不是(上面第一種情況),表明這個數不是質數。
1 public static void test2() {
2 int i, j;
3 for (i = 2; i <= 100; i++) {
4 for (j = 2; j < i; j++) {
5 if (i % j == 0)
6 break;
7 }
8 if (j >= i)
9 System.out.println(i);
10 }
11 }
方法二:
思路:
1、外層迴圈作為被除數,內層迴圈作為除數。
2、
3、內層迴圈結束,如果開關還為true。即被除數為質數,打印出來
1 public static void test3() {
2 for (int i = 2;i<= 100;i++){//1既不是質數也不是和數,所以從2開始
3 boolean k = true;
4 for (int n = 2; n < i; n++) {
5 if (i % n == 0) {
6 k = false ;
7 break;
8 }
9 }
10 if(k){
11 System.out.print(i + " ");
12 }
13 }
14 }
升級版:
如果能把上兩種方法寫出來,確實已經很好了。但有沒有更優的程式碼去實現?
試著去想這些問題:
1、外層for迴圈有必要執行100次嗎?
除了2所有的偶數都不是質數,那麼能不能只遍歷奇數。
程式碼:for (int i = 3; i < 100; i+=2) //i一次迴圈自增2
考慮到這個問題,for迴圈就少遍歷了50次。效率就提升了一倍
2、內層for迴圈能不能也做些優化呢?
內層for迴圈作為 除數(除數從3 到 被除數-1),通過規律發現
除數只需要從3 到 除數的開平方根數 就行了。
1 public static void test4() {
2 boolean bool;
3 for (int i = 3; i < 100; i+=2) {
4 bool = true;
5 for (int j = 3; j <= Math.sqrt(i); j++) {
6 if (i % j == 0) {
7 bool = false;
8 break;
9 }
10 }
11 if (bool)
12 System.out.print(i + " ");
13 }
14 }
相關推薦
Java 輸出1-100之內的所有質數
兩層迴圈 public class hw40417 { public static void main(String[] args) { int i, j; for (i = 1; i <= 100; i++) { f
輸出1-100之內的所有質數
方法一: 思路: 1、這個程式用了兩層迴圈。外層迴圈列舉從2到100之間的每一個整數(作為被除數), 然後在內層迴圈中用從2到它之間的數去除它,如果找到了一個能夠整除它的數,內層迴圈將立即跳出(此時j小於i)。 如果一直沒有找到能夠整除它的數,則當內層迴圈將2到它之間的所
python入門:輸出1-100之內的所有奇數和偶數
utf env false 報錯 pytho 賦值 1-1 pass 所有 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #輸出1-100之內的所有奇數和偶數 4 """ 5 給start賦值等於1,whi
JavaScript 用for迴圈輸出1-100之間所有的質數(只能被1和自身整除的數,不包括1)
用for迴圈輸出1-100之間所有的質數(只能被1和自身整除的數,不包括1) 也就是說 2 3 5 7 11 。。。等只有被1和自身整除的數字。 如何判斷出1到100的字數呢? 拿 51這個數字舉例 我們可以用for迴圈記錄一下 51%j=0的發生了幾次 這
輸出1~100之內的素數及素數個數簡單程式
#include <stdio.h> int main() { int i; int j; int k = 1; for(i = 1; i <= 100; i++) { if(i == 2)
輸出1-100之間的所有質數
方法 () pre 整數 之間 col 判斷 循環 pub 質數定義:在大於1的自然數中,除了1和它本身以外不再有其他因數,這樣的數稱為質數。 也就是說質數只能被1或者其本身兩者整除。 思路:要判斷n是否是質數,可以用n除於不大於n的整數(即n%m),當且僅當(n%m=
習題:輸出1-100之間的所有質數(素數)
/*程式目的:輸出1-100之間的所有質數(素數),並統計其個數。*/# include <stdio.h>int main(void){ int i, n, t = 0; for (n=1; n<=100; ++n) { for(i=2; i<=n; ++i) { if(n%
JS基礎_打印出1-100之間所有的質數
code pre logs 質數 打印 body 保存 pan ole 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"
輸出 1-100 內的所有奇數、偶數
輸出 spa family print pos while class pri font 輸出 1-100 內的所有奇數 、偶數 奇數: 方法一: for x in range(1,101): if x%2!=0:
輸出 1-100 內的所有奇數和
開始 pyc odin IT arm pytho print count .py #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/5/6 0006 10:52# @Author : Anthony
go語言求1到100之內的質數
clas package 合數 math 自然 import 兩個 一個 imp 素數指在一個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數。換句話說,只有兩個正因數(1和自己)的自然數即為素數(也叫質數)。比1大但不是素數的數稱為合數。1和0既非素數也
C 語言例項1—— 列印0~100之間所有質數
#include <stdlib.h> int main() { int number; int divisor; /* ** One and two are easy. */ printf( "1\n2\n" ); /* ** No other even
程式基本演算法習題解析 使用篩選法求出1~100之內的所有素數
思路: 第一個素數是2,把後面是2的整數倍的數全部篩去,篩去的數置0;從第一個素數2向後找出最小的未被篩去的數3,把它後面是3的整數倍的數全部篩去並置0;重複上述過程,直到新找到的素數大於1
演算法練習-打印出1-100以內所有的質數
題目要求: 打印出1-100以內所有的質數。 例如: 數字5, 只能被1和5整除。 沒有其他因數 JavaScript 做法 <script> // 質數陣列 var zhishuArr=[];
求1~100之間所有的質數
//方法一 for(var i = 2;i < 100;i++){var count = 0;for(var j = 1;j <= i; j++){if(i%j == 0){count++
編寫程式輸出1000以內,只能被自身和1整除的所有質數
int zhishu(int a); int main(int argc, const char * argv[]) { int c=0; int i; for (i=100; i<1000; i++) { if(z
C語言程式設計小測試。輸出1-100內的所有素數。
#include<stdio.h> //輸出100之內的所有素數 int main() { int i; int j; int flag = 1; for(i = 2;i <= 100;i++) {
用java求出1-100內所有的質數/素數
用java語言求出1-100以內的素數素數:A>1 && A%1==0 && A%A==0 && A%B!=0(1<B<A) 則A為素數思路:用A
求出1-100之間所有的素數(只能被1和它本身整除),要求每5個換行輸出。
publicclass chengxu2 { public static void main(String[] args) { int count = 4; System.out.print("2 3 5
組合語言學習:使用masm32尋找1-100中的質數
最近有點自閉,事情賊多,還要學這麼變態的彙編(╥╯^╰╥)。經過異常艱難的探索,終於完成了課程的第一個作業——用masm32尋找1-100的質數,寫下此篇部落格,轉換一下心情。( • ̀ω•́ )✧ 事先宣告,我是組合語言的萌新,接下來的程式碼可能存在許多多餘和不合適的地方,而且我把所有的變