阿傑 發問時間: 電腦與網際網路程式設計 · 1 0 年前

遇到難解的程式 請大大幫我解一下

用C++求這到題目 請使用者輸入數字範圍min與max,以及數量N,寫程式以亂數在[min, max]間產生N個不相同的質數

已更新項目:

第一ㄍ回答ㄉ程式碼 跑不動 出現錯誤 我改ㄌ又改 還是不動 請再幫ㄍ忙..

2 個解答

評分
  • Ashley
    Lv 7
    1 0 年前
    最佳解答

    #include <iostream>

    #include <vector>

    using namespace std;

    typedef vector<int> Vint;

    int main() {

    int i, j, max, min, n, r, t, vs;

    srand(time(NULL));

    cout << "請輸入正整數 min:" ;

    cin >> min;

    cout << "請輸入正整數 max:";

    cin >> max;

    cout << "請輸入在 [min, max] 間產生質數數目 n:" ;

    cin >> n;

    Vint vint;

    bool prime[max +1];

    prime[0] = true;

    prime[1] = true;

    prime[2] = false;

    for( i = 3; i <= max; i++ ) {

    if( i % 2 == 0 )

    prime[i] = true;

    else

    prime[i] = false;

    }

    for( i = 3; i * i <= max; i += 2 ) {

    if( prime[i] == false ) {

    for( j = i + i; j <= max; j += i )

    prime[j] = true;

    }

    }

    for( i = min; i <= max; i++ )

    if( prime[i] == false )

    vint.push_back(i);

    vs = vint.size();

    for( i = 0; i < vs; i++ ) {

    r = rand() % vs;

    if( r == i )

    continue;

    t = vint[i];

    vint[i] = vint[r];

    vint[r] = t;

    }

    if( vs < n ){

    n = vs;

    cout << "抱歉,質數最多只有 " << vs << " 個" << endl;

    }

    cout << "以亂數在 [" << min << ", " << max << "] 間產生 "

    << n << " 個不相同的質數:";

    for( i = 0; i < n; i++ ) {

    if( i % 10 == 0 )

    cout << endl;

    cout << vint[i] << " ";

    }

    system("pause");

    return 0;

    }

    參考資料: 個人的經驗
  • 1 0 年前

    是我理解的不對,還是題目有問題,

    min~max 之間就不可能有任意 n 個不相同的質數

    如果輸入 10 , 20 n=50

    結果會是什麼??

    而且質數幾乎就那麼幾個,跟亂數扯在一起,怪怪的!

還有問題?馬上發問,尋求解答。