#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 ...