最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C程序?qū)崿F(xiàn)整數(shù)的素數(shù)和分解問題

 更新時間:2014年09月17日 11:05:39   投稿:shichen2014  
這篇文章主要介紹了C程序?qū)崿F(xiàn)整數(shù)的素數(shù)和分解問題,對于算法的學(xué)習(xí)有不錯的借鑒價值,需要的朋友可以參考下

本文以實例形式講述了C程序?qū)崿F(xiàn)整數(shù)的素數(shù)和分解問題,分享給大家供大家參考之用。具體方法如下:

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

例如:

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

思路如下:

f(N, array) = f(N - array[i], array), 保存結(jié)果,array是保存里面元素值,即所有素數(shù),參考前面一題,如果素數(shù)只能唯一使用一次,那么就建立對應(yīng)的一個bool數(shù)組即可,每使用一次就標(biāo)記為true,然后遞歸函數(shù)之后需要重新置為false,對于本題不需要如此,但是需要將保存結(jié)果的數(shù)組除去當(dāng)前嘗試的素數(shù)。

代碼如下:

/*  
* 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 << "除去同構(gòu)" << endl;
 outputResult2(number, prvec, result, 0);
}

運行結(jié)果如下圖所示:

注意:對于同構(gòu)問題,我是看輸出結(jié)果之后想到的,outputResult函數(shù)中,結(jié)果332,這樣不對的結(jié)果,一個明顯的特征是出現(xiàn)3后,其后面的數(shù)不能再小于3,那么只需要對保存3當(dāng)前的position即可,然后在當(dāng)前position循環(huán),就可以消除同構(gòu)問題。

相信本文所述對大家C程序算法設(shè)計的學(xué)習(xí)有一定的借鑒價值。

相關(guān)文章

  • 詳解C++中的左值,純右值和將亡值

    詳解C++中的左值,純右值和將亡值

    C++中本身是存在左值,右值的概念,但是在C11中又出現(xiàn)了左值,純右值,將亡值得概念;這里我們主要介紹這些值的概念,感興趣的可以了解一下
    2022-09-09
  • C++ 實現(xiàn)雙向鏈表的實例

    C++ 實現(xiàn)雙向鏈表的實例

    這篇文章主要介紹了C++ 實現(xiàn)雙向鏈表的實例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++帶有指針成員的類處理方式詳解

    C++帶有指針成員的類處理方式詳解

    這篇文章主要為大家詳細(xì)介紹了C++帶有指針成員的類處理方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(二)

    C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(二)

    這篇文章住要介紹的是選擇類排序中的簡單、樹形和堆排序,歸并排序、分配類排序的基數(shù)排序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2021-12-12
  • C++趣味算法之偵探推理

    C++趣味算法之偵探推理

    本文詳細(xì)講解了C++趣味算法之偵探推理,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C語言中的abs()函數(shù)和exp()函數(shù)的用法

    C語言中的abs()函數(shù)和exp()函數(shù)的用法

    這篇文章主要介紹了C語言中的abs()函數(shù)和exp()函數(shù)的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • VS2019創(chuàng)建c++動態(tài)鏈接庫dll與調(diào)用方法實踐

    VS2019創(chuàng)建c++動態(tài)鏈接庫dll與調(diào)用方法實踐

    動態(tài)鏈接庫是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫,本文主要介紹了VS2019創(chuàng)建c++動態(tài)鏈接庫dll與調(diào)用方法,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 基于Qt編寫簡易的視頻播放器

    基于Qt編寫簡易的視頻播放器

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實現(xiàn)編寫簡易的視頻播放器,可以支持pbonon/qmediaplayer/ffmpeg/vlc/mpv等多種內(nèi)核,感興趣的可以學(xué)習(xí)一下
    2022-12-12
  • 用C語言模仿Python函數(shù)的一種簡單實現(xiàn)方法

    用C語言模仿Python函數(shù)的一種簡單實現(xiàn)方法

    這篇文章主要介紹了用C語言模仿Python函數(shù)的一種簡單實現(xiàn)方法,需要的朋友可以參考下
    2017-05-05
  • VisualStudio2010安裝教程

    VisualStudio2010安裝教程

    這篇文章通過圖文并茂的形式給大家介紹VisualStudio2010安裝教程,在日常開發(fā)中是必不可少的搭建過程,感興趣的朋友跟隨小編一起看看吧
    2021-11-11

最新評論

云浮市| 平果县| 阿鲁科尔沁旗| 乌鲁木齐县| 乌兰县| 盘锦市| 石柱| 乌兰察布市| 清丰县| 贵阳市| 衡南县| 宝丰县| 山东省| 汝城县| 贡嘎县| 措美县| 惠安县| 昌图县| 哈密市| 洪雅县| 兴安盟| 元朗区| 景泰县| 陕西省| 开封县| 襄垣县| 凭祥市| 盐源县| 河南省| 延安市| 咸宁市| 榆树市| 惠来县| 贵南县| 左云县| 三亚市| 江安县| 易门县| 灵石县| 平阳县| 防城港市|