# Prime Number# Square Root# Iteration

e484 - Error

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷輸入的整數是否為質數。如果輸入的數字不是質數,則輸出 "no",否則輸出 "yes"。

解題思路

程式碼首先讀取一個整數 a。如果 a 是偶數且不等於 2,則直接輸出 "no",因為除了 2 以外的偶數都不是質數。否則,程式碼使用迴圈從 3 開始,以 2 為步長,迭代到 sqrt(a)。在迴圈中,程式碼檢查 a 是否可以被當前迭代的數字 i 整除。如果可以,則輸出 "no",並跳出迴圈。如果迴圈完成且沒有找到任何可以整除 a 的數字,則輸出 "yes"。

複雜度分析

  • 時間複雜度: O(sqrt(n)),其中 n 是輸入的數字。因為迴圈迭代到 sqrt(n)。
  • 空間複雜度: O(1),因為程式碼只使用了常數級別的額外空間。

程式碼

#include <iostream>
#include <cmath>

using namespace std;

int main(){
	int a=0;
	bool ans=true;
	while(scanf("%d",&a)){
		if(a%2==0&&a!=2){
			printf("no\n");
			ans=false;
		}
		else{
			for(int i=3;i<=sqrt(a);i+=2){
				if(a%i==0){
					printf("no\n");
					ans=false;
					break; 
				}
			}
		}
		if(ans==true){
			printf("yes\n");
		}
		ans=true;
		return 0;
	}
}

Discussion