e484 - Error
題目描述
題目要求判斷輸入的整數是否為質數。如果輸入的數字不是質數,則輸出 "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;
}
}