1. 程式人生 > >輸入一個整數n,求小於這個整數的所有質數。

輸入一個整數n,求小於這個整數的所有質數。

演算法:定義一個長度為n的boolean陣列,true表示是質數,false表示不是質數。初始化為true,之後從2開始迴圈。

步驟:

    I、找到第一個值為true的下標i。

    II、把所有的下標為i的倍數的值 置為false。

    III、直到掃描完陣列中的所有數值。

    IV、最後遍歷陣列,如果下標i的值為true,則說明i為質數。

import java.util.Scanner;
/**
 * 
 * @author LLJ
 *	列印比n小的質數
 */
public class ZhiShu5_1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("請輸入一個整數n:");
		int n = sc.nextInt();
		boolean[] b = new boolean[n+1];//初始化一個數組(boolean型別)
		
		for(int i = 0;i < b.length;i++){//初始化,所有值都為true
			b[i]=true;
		}
		for(int j = 2;j < b.length;j++){//進行b.length輪篩選
			if(b[j]){//j為true,也就是b[j]為質數
				//把j的倍數設為false(因為一個數如果是質數,那它的倍數一定不是質數)
				for(int k = j*2;k < b.length;k+=j){
					b[k]=false;
				}
			}else{//否則,重新迴圈
				continue;
			}
		}
		//遍歷陣列
		for(int z = 2;z < b.length;z++){
			if(b[z]){//如果b[z]為true,則輸出質數z
				System.out.print(z + "\t");
//				System.out.print(b[z] + "\t");//測試,列印此元素是否是質數
			}
		}
		
	}
}

相關推薦

輸入一個整數n小於這個整數所有質數

演算法:定義一個長度為n的boolean陣列,true表示是質數,false表示不是質數。初始化為true,之後從2開始迴圈。步驟:    I、找到第一個值為true的下標i。    II、把所有的下標為i的倍數的值 置為false。    III、直到掃描完陣列中的所有數值

輸入一個自然數n小於等於n的素數之和

程式碼如下 #include<stdio.h> #include<math.h> int panduan(int i) { int n=2,p=1; if(i==2||i==3) return 1; while(n<=sqrt(i)) {

【C語言】輸入一個整數NN以內的素數之和

【C語言】輸入一個整數N,求N以內的素數之和   /* ============================================================================ Name

從鍵盤中輸入一個整數n1-n的和以及偶數和、奇數和

n=int(input("從鍵盤中輸入一個數:")) sum1=0 sum2=0 sum3=0 i=1 while i<=n: sum1+=i if i%2==0: sum2+=i else:

劍指offer第32題JS演算法:輸入一個整數n從1到nn整數的十進位制表示中1出現的次數例如輸入12從1到12這些整數中包含1的數字有11011和121一共出現了5次

題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次 這是我某一次去朋友公司面試試水時出的面試題,結果給我五分鐘我寫了個for迴圈的方法,被狠狠鄙視/哭笑不得 結果回來後好奇就跟同事

輸入一個正數x和一個整數n下列算式的值要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn)兩個函數的返回值類型是double

返回值 %d time data body 一個 pow color printf 題目描述 輸入一個正數x和一個正整數n,求下列算式的值。要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函數的返回值類型是d

給定一個整數n出0到n中有幾個數滿足其二進位制表示不包含連續的1

樣例: 輸入:5 輸出:5 0 01 10 100 101滿足,11不滿足。 那麼6144呢? 答案是610,怎麼去計算呢? 思路:查詢從0到n中有多少個數包含連續的1,然後在總數中去掉這些情況,得到

【程式設計之美】任意給定一個32位無符號整數nn的二進位制表示中1的個數

任意給定一個32位無符號整數n,求n的二進位制表示中1的個數,比如n = 5(0101)時,返回2,n = 15(1111)時,返回4。這也是一道比較經典的題目了,相信不少人面試的時候可能遇到過這道題吧,我今天就遇到了,當時懵了。現在想想多簡單,浪費了一次機會。 1.普通法

一個整數n出位數並按正序輸出逆序輸出

求出位數通過讓給定的正整數n整除10,且每整除一次讓統計位數的變數count自增一,返回count得到位數。#include<stdio.h> int GetFigure(int n) { int count=0; do { count ++;

任意給定一個整數N一個最小的正整數M(M>1)使得N*M的十進位制表示形式裡只含有1和0

解決這個問題首先考慮對於任意的N,是否這樣的M一定存在。可以證明,M是一定存在的,而且不唯一。 簡單證明:因為   這是一個無窮數列,但是數列中的每一項取值範圍都在[0, N-1]之間。所以這個無窮數列中間必定存在迴圈節。即假設有s,t均是正整數,且s<t,有 。於是迴圈節長度為t-s。於是10

sum=2+5+8+11+14+…輸入整數nsum的前n項和

#include<iostream> using namespace std; int main() {     int sum=0,a=2,n,i;     cin>>n;

(c++)sum=2+5+8+11+14+…輸入整數nsum的前n項和

好吧,只是一個很簡單的等差數列求和公式,然而還是由於強迫症,貼了上來..... #include<iostream> using namespace std; int main()

輸入一個奇數n打印出一個n*n的矩陣每個數字是從1到n*n整數要使每一行每一列的數字之和都相等

#include<stdio.h> int a[1000][1000]; int main() {     int n,i,j;     scanf("%d",&n);     a[0][n/2]=1;     for(i=0;i>n;i++){

騰訊筆試題——用11224488...2^i,2^i拼湊成一個整數n問多少種拼湊方法

用1,1,2,2,4,4,8,8…2^i,2^i拼湊成一個整數n,求問多少種拼湊方法 話不多說,上程式碼: #include<iostream> #include<math.h> #include<time.h> #i

輸入一個數字n列印1到n位數的最大值eg:n=3代表列印1-999之間的數字

相關解決: package com.swordRefersToOffer; import java.util.Arrays; /** * @author 凌龍 * @date 2018/9/28 */ public class Test { public

輸入一個正數n輸出所有和為n的連續正數序列

public class b { public static void main(String[] args) { getlx(15); } private static void getlx(int n) { //定義最小序列 int min = 1;

C++課後練習——從鍵盤輸入一組非0整數輸入0標誌結束這組整數的平均值 並統計其中正數和負數的個數

從鍵盤輸入一組非0整數,以輸入0標誌結束,求這組整數的平均值, 並統計其中正數和負數的個數。 #include <iostream> using namespace std; void m

輸入一個連結串列從頭到尾列印連結串列的值

題目:輸入一個連結串列,從頭到尾列印連結串列的值題意分析:從頭到尾列印連結串列的值,即逆序列印連結串列。       思路:  step1:輸入連結串列                    step2:我們可以利用ArrayList容器來對連結串列中的資料來進行儲存    

如何得到一個命名空間或者接口中的所有

com 追溯 一起 塵埃 ofo 復雜 回復 做到 回顧 <p>  至夜,清醒;軟弱焦灼、 無法表達 便勉強撐起,嘴角上揚; 於是大片的軟弱暴露在!這清早的光中, 赤裸清晰、帶著可笑、、 前行,卻不知邁出左腳或是右腳、 原地,只能張望 以為,只是在自己給自己講童

階乘輸入一個整數 n輸出n

factor i++ print 階乘 pri tor n) printf main #include<stdio.h>int factorial (int n); int main(){ int n; scanf("%d",&n); printf("