我的目標是根據用戶的輸入顯示第一個素數串列,當用戶輸入 10 時,程式應該顯示前 10 個素數,即 2 3 5 7 11 13 17 19 23 29。我正在考慮生成從第一個質數 2 到第 100 個質數 541 的串列然后如果用戶輸入例如 100 那么它將等于 2 到 541。我的演算法會起作用嗎?目前我能夠顯示 2 - 541 的質數,并堅持為 1-100 輸入實作另一個回圈。
#include <iostream>
using namespace std;
int main() {
int N, counter, i, j, isPrime, n;
cout << "List of prime numbers from 1-100: ";
cin >> N; // if the user input 10 then the first 10 prime numbers are "2 3 5 7 11 13 17 19 23 29"
// list of prime from 2-541 (or first list from 1-100 prime numbers)
for (i = 2; i <= 541; i ) {
isPrime = 0;
for (j = 2; j <= i/2; j ) {
if (i % j == 0) {
isPrime = 1;
break;
}
}
if (isPrime == 0 && N != 101)
cout << i << " ";
}
}
uj5u.com熱心網友回復:
您當前的演算法不起作用,因為N從未修改過。如果用戶輸入,101則不會列印任何內容,因為if (isPrime == 0 && N != 101)將始終是false. 如果用戶輸入任何其他內容,則它將始終列印前 100 個素數。
關鍵思想是計算在N第 th 個素數之后找到并打破了多少個素數。或者倒數,我們還需要多少素數。大致的輪廓如下:
for (i = 2; N > 0; i ) { // Loop as long as we need to find more primes
...
if(isPrime == 0) {
std::cout << ...
N--; // <- Found one prime, N-1 to go
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331760.html
標籤:C
下一篇:生成具有頂點和索引的球體?
