讓使用者輸入一個整數,並輸出該數是否為質數
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int x, a = 0, b = 0; //a=非質數;b=質數;
cin >> x;//待檢查數
if(x==0||x==1)
{
cout << "不是質數" << endl;
}
else
{
for (int i = 2; i < sqrt(x);i++)
{
if(x%i == 0)
{
a++;//代表有除了1的因數,且是此i值
}
else if(x%i != 0)
{
b++;//代表此i值不是x的因數
}
}
}
if(a>=1)
{
cout << "不是質數" << endl;
}
else
{
cout << "是質數" << endl;
}
}
//initial expression
for(cond-expression)
{
//loop-expression
}
for迴圈是程式中很常出現的一個語法,通常在for前面會出現代表這個迴圈的初始設定,本題就是當程式執行到else內部才會開始執行for,而在括號中的cond-expression則代表了執行loop-expression的條件,當其為true時才會執行loop,舉例而言
for(int i = 0; i < 2; i++ )
{
cout << i;
}
這個程式中的判斷標準變是以"當下的變數i"是否小於二去執行cout<<i"
的指令與次數。因此在程式執行時,依序在
i=0,因為此時的i=0 < 2,因此他會先印出"0",而後進行了i++
也可寫作i=i+1
,代表i值增加1
i=1,因為此時的i=1 < 2,因此他會印出"1"而後進行了i++
i=2,因為此時的i=2 !< 2,!
代表"不"的意思,因此他會結束這個loop且不會印出任何東西
所以這段程式的結果便會呈現"01"。
我們很常運用for loop配合if else、while與其他迴圈去實現我們想執行的程式邏輯。
由題目可得知
input:為一個整數值
output:呈現他是否為"質數"的結果,這裡我們用string(字串)的方式印出成果
我們先另x=輸入數,a,b分別作為其為"非質數"與"質數"的代表。並用第一個if條件將x=0和1的情形排除,並在else的條件中逐一判定i由2~(根號x)-1的範圍內是否有出現"任何一次"i為x因數的情況(因為質數定義為因數只有自己和1),若是有,則代表他不是質數,那就會使代表"是此i的倍數"="非質數"的a++;否之則會使代表"不是此i的倍數"的b++,並一直重複這個過程到結束。最後再由a的值來判斷便可以得出結論。
**小技巧:**因為其最大質因數必不會超過本身開根號的答案,加上這個條件可以有效降低程式的時間複雜度,也就是使執行效率更快