# Prime Number# Brute Force# Number Theory# Iteration

a121 - 質數又來囉

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算給定區間 [a, b] (包含 a 和 b) 內質數的個數。輸入兩個正整數 a 和 b,輸出區間內的質數數量。

解題思路

此題採用暴力法求解。對於區間 [a, b] 中的每個數字 j,從 2 到 sqrt(j) 進行迴圈,檢查 j 是否能被任何數字整除。如果 j 不能被任何數字整除,則 j 是質數,計數器 i 增加。 特別注意,如果 a 或 b 等於 1,則需要將計數器 i 減 1,因為 1 不是質數。

複雜度分析

  • 時間複雜度: O(n * sqrt(n)),其中 n 是 b - a + 1。因為對於區間內的每個數字,我們都需要進行到 sqrt(j) 的迴圈檢查。
  • 空間複雜度: O(1),因為我們只使用了常數個額外的變數。

程式碼

#include <iostream>
#include <math.h>  

using namespace std;

int main(){
	long long int a=0,b=0;
	int i=0;
	bool c=true;
	while(cin >> a >> b){
		if(b>=a){
			for(long long int j=a;j<=b;j++){
				for(long long int k=2;k<=sqrt(j);k++){
					if(j%k==0){
						c=false;
						break;
					}
				}
				if(c==true){
					i++;
				} 
				c=true;
			}
			if(a==1||b==1){
				i--;
			}
			cout << i << endl;
			i=0;
		}
		else{
			cout << 0 << endl;
		}
	}  
	
	
}

Discussion