C程式實現整數的素數和分解問題_C 語言

來源:互聯網
上載者:User

本文以執行個體形式講述了C程式實現整數的素數和分解問題,分享給大家供大家參考之用。具體方法如下:

要求:對於一個給定的整數,輸出所有這種素數的和分解式,對於同構的分解只輸出一次(比如5隻有一個分解2+3,而3+2是2+3的同構分解式)。

例如:

對於整數8,可以作為如下三種分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3) 8 = 3 + 5
 
看到此題時,我的頭一反應是求解背包問題

思路如下:

f(N, array) = f(N - array[i], array), 儲存結果,array是儲存裡面元素值,即所有素數,參考前面一題,如果素數只能唯一使用一次,那麼就建立對應的一個bool數組即可,每使用一次就標記為true,然後遞迴函式之後需要重新置為false,對於本題不需要如此,但是需要將儲存結果的數組除去當前嘗試的素數。

代碼如下:

/*  * Copyright (c) 2011 alexingcool. All Rights Reserved.  */ #include <iostream>#include <iterator>#include <algorithm>#include <vector>using namespace std;vector<int> result;vector<int> prvec;void outputResult(int N, vector<int> &prime, vector<int> &result){ if(N < 0) return; if(N == 0) { copy(result.begin(), result.end(), ostream_iterator<int>(cout, " ")); cout << endl; return; } for(int i = 0; i < prime.size(); i++) { //為提高效率,可以在此做個判定條件,儘快返回 if(N - prime[i] < 0)  break; result.push_back(prime[i]); outputResult(N - prime[i], prime, result); result.pop_back(); }}void outputResult2(int N, vector<int> &prime, vector<int> &result, int position){ if(N < 0) return; if(N == 0) { copy(result.begin(), result.end(), ostream_iterator<int>(cout, " ")); cout << endl; return; } for(int i = position; i < prime.size(); i++) { //為提高效率,可以在此做個判定條件,儘快返回 if(N - prime[i] < 0)  break; result.push_back(prime[i]); outputResult2(N - prime[i], prime, result, i); result.pop_back(); }}bool isPrime(int number){ if(number <= 1) return false; if(number == 2) return true; for(int i = 2; i < number; i++) { if(number % i == 0)  return false; } return true;}void generatePrime(int number, vector<int> &result){ for(int i = 2; i < number - 1; i++) { if(isPrime(i))  result.push_back(i); }}void main(){ int number = 8; generatePrime(number, prvec); outputResult(number, prvec, result); cout << "除去同構" << endl; outputResult2(number, prvec, result, 0);}

運行結果如下圖所示:

注意:對於同構問題,我是看輸出結果之後想到的,outputResult函數中,結果332,這樣不對的結果,一個明顯的特徵是出現3後,其後面的數不能再小於3,那麼只需要對儲存3當前的position即可,然後在當前position迴圈,就可以消除同構問題。

相信本文所述對大家C程式演算法設計的學習有一定的借鑒價值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.