常見演算法之12 求a n p

2022-03-14 17:22:44 字數 1050 閱讀 7333

題目:求(a^n)%p的值。

方案一:暴力解法,先算出a^n的值,然後再去求模。

分析:這種做法最簡便直觀,但缺點是運算效能不好,在輸入較大時會產生溢位,導致結果錯誤。

**:

public

static

long calmod1(int a, int n, int

p)

方案二:暴力解法,迴圈求a^n的每一步中,將求模運算融入其中。

分析:可讀性上也是比較直觀,並且不會溢位。

**:

public

static

long calmod2(int a, int n, int

p)

方案三:在a^n的運算中,隨著n的增大,模p的結果最多有p種結果,並且是迴圈出現的。所以,我們記錄其中不斷出現的結果,直到有重複的出現(證明乙個輪迴了)。

分析:效能最優,並且不會溢位。

**:

public

static

long calmod3(int a, int n, int

p)

return array[n % p - 1];

}

方案四:運用數學原理:(a*b)%p == (a%p)*(b*p)%p,將a^n不斷的拆分成兩個部分。

分析:時間複雜度上為o(logn),但因為運用了遞迴,所以總體效能不如方案三。

**:

public

static

long calmod4(int a, int n, int

p)

演算法之求質數

問題 統計所有小於非負整數 n 的質數的數量。一開始直接使用暴力列舉法 public static intcountprimes int n return count public static boolean isprimes int n return true 發現在leetcode上會超出時間...

隨機演算法之求

用隨機方法求 具體方法如下 易想到用 s 正方形內切圓 與s 正方形 比值求得 我們首先對內切圓圓心為座標原點建立座標系,考慮到隨機函式rand 產生0 rand max的隨機數,所以產生的點均落在第一象限,第一象限1 4圓和圓外 的點的個數比值即為 s 正方形內切圓 與s 正方形 比值 inclu...

常見的12種排序演算法概念 思想 演算法整理

交換排序 exchange sort 選擇排序 select sort 歸併排序 其它排序 其它操作 今年資料結構課設最後一道題要寫好幾種不同排序演算法的效率比較,所以今天就先來做一下排序演算法的功課。基本概念 主 次關鍵碼 排序演算法的穩定性 內 外排序 時間開銷 資料比較次數 資料移動次數 靜 ...