c 正整數拆分成素因子的乘積

2021-07-30 20:16:49 字數 1508 閱讀 1853

#include//設計演算法,將某個大於1的數分成素因子的乘積 6=2*3  7=7 8=2*2*2

//1.判斷當前數是不是素數,是直接返回

//2.否則,迴圈直到第乙個它能整除的素數,當前數變為除以素數後的商,繼續大迴圈。

//判斷乙個數是不是素數

#include bool isprime(int x)

return true;

}string primemulti(int x)

if (x % 2 == 0)

for (int i = 3; i <= x; i += 2)

} }if (x == 1) //若最終x為1,需去掉尾上多餘的乘號

改進:先把小於該數的素數求出來,儲存在vector中,可以減少素數的重複判斷

#include #include #include #include using namespace std;

bool isprime(long n)

return;

}int main();

long n;

cin >> n;

prime(n, v);

while (n != 1)

++i;

} }cout << endl;

return 0;

}

發現乙個更簡單的,不用判斷是不是素數,直接除以比n小的數即可。

void primefactor(long n)}}

}

加乙個其它習題:

//設計演算法,求二項式c(n,k)的係數

//c(n,k)=c(n,k-1)+c(n-1,k-1)

int er(int n,int k)

再加乙個漢諾塔問題,都是用遞迴實現的。遞迴可以讓**更簡潔,甚至解決一些迴圈不能解決或解決起來超級複雜的問題

void move(int n,char from, char to)

//實現漢諾塔盤子移動

//關鍵點:只有乙個盤子,直接把它從from移動到to,否則,先移動n-1個盤子,以to為臨時柱子

//移動到tmp;再移動第n個盤子到to;最後將那n-1個盤子從tmp以from為臨時柱子移動到to

void hanuota(int n, char from, char tmp, char to)

}

執行hanuota(3,'a','b','c');得到的輸出:

將乙個正整數L隨機拆分成n個正整數

隨機指定範圍內n個不重複的數 最簡單最基本的方法 param min 指定範圍最小值 param max 指定範圍最大值 param n 隨機數個數 public static int randomcommon int min,int max,int n int result new int n i...

正整數的因子與質因子

給定乙個正整數,求其所有因子與質因子。所給正整數不超過long型別的最大表示範圍。1,60,2,30,3,20,4,15,5,12,6,10 2,3,5 理論 首先明確幾個數學概念和結論 1.乙個數的自身和1都是其因子 2.乙個數的因子總是成對出現num m n 3.如果m不等於n,則m和n必定分別...

正整數n拆分成幾個不同的平方數 DFS 打表

考慮將正整數n拆分成幾個不同的平方數之和,比如30 1 2 2 2 5 2 1 2 2 2 3 2 4 2,而8不存在這樣的拆分。1 include2 using namespace std 34 const int maxn 1000 10 5 bool vis maxn 6 vectorres ...