a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C程序實現整數的素數和分解問題

2020-01-26 15:18:32
字體:
來源:轉載
供稿:網友

本文以實例形式講述了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程序算法設計的學習有一定的借鑒價值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲免费成人 | 在线视频久 | 中文字幕一区二区三 | 久久天堂网 | 国产精品爱久久久久久久 | 经典三级在线播放 | 国产一区 | 先锋资源av在线 | 日韩二区三区 | 日韩爱爱免费视频 | 亚洲一区二区三区四区的 | 国产精品v欧美精品v日韩 | 亚洲视频观看 | 九九精品视频在线观看 | 中文字幕av一区二区三区 | 日韩aⅴ影视 | 国产在线国偷精品产拍 | 欧美日韩精品区 | 久久精品国产99久久久 | 中文字幕自拍偷拍 | 国产精品一区二区久久精品涩爱 | 热99re久久免费视精品频软件 | 亚洲不卡| 午夜影院入口 | 亚洲视频一区二区三区四区 | 色噜噜在线视频 | 亚洲九九| 日韩三级中文字幕 | 亚洲精品日本 | 亚洲国产精品久久精品怡红院 | 精品久久一区二区 | 黄视频在线免费看 | 黄色毛片在线看 | 欧美十次 | av大片网| 天堂中文av在线 | 欧美成人一区二区三区片免费 | 久久国产精品大桥未久av | 高清国产一区二区三区 | 精品国产一区二区三区国产馆杂枝 | 91久久国产综合久久 |