排序1與分解質因數 2021 01 25更

2021-10-17 12:12:14 字數 2039 閱讀 7907

任何乙個數都可以分解為乙個或多個質數的乘積,這些質數稱為這個數的質因數。

現在輸入乙個正整數n,輸出它質因數乘積的形式。

比如,12=2 * 2 * 3,2和3均為質數。

輸入一行,包含乙個正整數n(n<=10^14)。

輸出一行,為乙個數分解為質因數乘積的形式,每個質因數由小到大輸出。

輸入樣例

12輸出樣例

12=2 * 2 * 3

其實我做這道題的時候,第一時間是想到迴圈一遍求出它的因數,再判斷質數,但是n最大是10^14,所以直接就tle了,而且輸出來的也不全對,後來才學會了分解質因數的快速解法。

分解質因數:從2開始迴圈到n的平方根,當n能整除當前的p(因數)時,不斷除直到n無法整除p,再p+1,如果除完平方根後n!=1,則當前的n是最後乙個質因數。

#include

using

namespace std;

intmain()

else

t++;}

return0;

}

在素數系統中,乙個數字n被表示為若干個素數冪的乘積。形如: n=p1^m1 × p2^m2 × p3^m3 × … × pi^mi ,其中 p1 > p2 > p3 > … > pi 。

例如:18=3 ^ 2 * 2 ^1

現在給出n在素數系統中的表示,要求給出n-1在素數系統中的表示。

輸入第一行有乙個整數k(1<=k<=32)。

接下來k行給出pi,mi。

輸入保證3<=n<=10^14。

輸出輸出n-1的素數表示,按照pi從大到小輸出。

輸入樣例

25 1

2 1輸出樣例

3 2這道題目是一道模擬題,先求出n,再把n-1的質因數分解出,再從大到小輸出質因數和次數。做這道題的時候我最可悲的是我忘了分解質因數的做法(見t1),用了暴力求法,導致直接就tle了。

#include

using

namespace std;

typedef

unsigned

long

long ull;

ull n,h=

1,a[

1010][

2],c;bool v;

intmain()

h--;long

long p=2;

while

(h>1)

//分解質因數

v=true;}

if(v)

p++;if

(p*p>h)

break;}

if(h>1)

for(

int i=c;i>=

1;i--

) cout<]<<

" "<]

}

小明有一款新式積木,每個積木上都有乙個數,一天小明突發奇想,要是把所有的積木排成一排,所形成的數目最大是多少呢?

你的任務就是讀入n個數字積木,求出所能形成的最大數。

輸入第一行是乙個整數n(n≤1000),接下來n行每行是乙個正整數。

輸出一行,表示所能形成的最大整數。

輸入樣例313

131343

輸出樣例

34313131

我第一時間看到這題的時候是想用陣列來做的,但sort完了之後發現完全不對,用其他方法排又弄的很麻煩,所以又想了一段時間,發現這道題目最後輸出的其實與數字大小無關,只是看誰高位數字大,這就有點像字串的比較大小,只看當前位而不看總長度,於是乎我就嘗試開了1010個字串陣列(以前沒試過)比較,然後竟然神奇的過了。

#include

using

namespace std;

int n;

string s[

1010];

intmain()

排序系列——排序2

排序系列——排序3

分解質因數

質因數概念 每個合數都可以寫成幾個質數相乘的形式,這幾個質數就都叫做這個合數的質因數。如果乙個質數是某個數的因數,那麼就說這個質數是這個數的質因數。而這個因數一定是乙個質數。演算法原理 先根據需要分解的合數生成乙個質數表。然後依次從小到大依次除合數,每次除之後都將儲存步驟。表達不好,還是看 吧 us...

分解質因數

分解質因數 問題描述 求出區間 a,b 中所有整數的質因數分解。輸入格式 輸入兩個整數a,b。輸出格式 每行輸出乙個數的分解,形如k a1 a2 a3.a1 a2 a3.k也是從小到大的 具體可看樣例 樣例輸入 3 10 樣例輸出 3 34 2 2 5 56 2 3 7 78 2 2 2 9 3 3...

分解質因數

大數的質因數分解一直以來是亟需解決的難題。本文從最基本的試除法開始,分解質因數的方法。下面的程式在開頭定義了乙個巨集opt,如果刪掉這個定義,就可以執行最原始的演算法。一 樸素演算法 include include include using namespace std define opt int...