[英]Prime numbers c++
我有以下代碼:
#include <iostream>
#include <cmath>
using namespace std;
int n, liczba;
int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
cin >> liczba;
if (liczba < 2) {
cout << "NIE" << endl;
} else if (liczba == 2) {
cout << "TAK" << endl;
}
for (int i = 2; i < liczba; i++) {
if (liczba % i == 0) {
cout << "NIE" << endl;
break;
} else if (liczba % i != 0) {
cout << "TAK" << endl;
break;
}
}
}
return 0;
}
無論您輸入的數字是素數還是否,該程序都應該寫"TAK"
或"NIE"
。 變量n
是要輸入到程序中的數字數,而liczba
是要檢查其是否為質數的數字。 期待一件重要的事情似乎很好。 如果我輸入數字9,它說是"TAK"
而不是"NIE"
..我發現這恰好發生在數字上: 9,27,45,63,81
,依此類推..如果我從9
開始加18
,它將每次都會發生。
我的代碼有什么問題?
你break
荷蘭國際集團在您的兩面if()
測試。 實際上,您只會測試一個除數:
例如liczba = 9
1. if (liczba % 2 == 0) -> if (9 % 2 == 0) -> if (1 == 0) -> false
2. ...jump to else
3. if (liczba % 2 != 0) -> if (9 % 2 != 0) -> if (1 != 0) -> TRUE
4. spit out 'tak' and break out of the loop
如果有剩余,則不能“盡早”突破循環。 這意味着您測試的除數不是數量的因數。 如果您確實得到0
的余數,則只能提早休息,這意味着該數字不是素數-它是合成的。
暗示:
所有素數(2和3除外)都可以
6k+1
或6k-1
的形式表示,其中k是正整數。
因此,這應該工作:
bool IsPrime( int number )
{
if ( ( (!(number & 1)) && number != 2 ) || (number < 2) || (number % 3 == 0 && number != 3) )
return (false);
for( int k = 1; 36*k*k-12*k < number;++k)
if ( (number % (6*k+1) == 0) || (number % (6*k-1) == 0) )
return (false);
return true;
}
取自確定數字是否為質數 。
您尚未使用標志,因此在第一次檢查后會顯示NIE
。 此外,您缺少else語句。 嘗試以下方法:
#include <iostream>
#include <cmath>
using namespace std;
int n,liczba;
int main()
{
cin >> n; //
for(int i=0;i<n;i++)
{
cin>>liczba;
if (liczba < 2)
{
cout << "NIE" << endl;
}
else if (liczba == 2)
{
cout << "TAK" << endl;
}
else
{
bool isPrime = true;
for (int i=2;i<liczba;i++)
{
if (liczba % i == 0)
{
isPrime = false;
break;
}
}
if(isPrime)
cout<<"TAK";
else
cout<<"NIE";
}
}
return 0;
}
當前,如果輸入7,它將檢查7 % 2 == 0
。 由於不是,它將打印“ NIE”並退出循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.