演算法協會公開課第二講

2021-10-06 12:40:31 字數 3867 閱讀 2794

在判斷素數的基礎上運用快速冪判斷是否:a^p = a (mod p),是則輸出yes,不是輸出no。

#include

#include

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using

namespace std;

typedef

long

long ll;

int p, a;

intpd

(int n)

ll qpow

(ll m, ll k, ll p)

return res;

}int

main()

return0;

}

這個題是典型的快速冪的應用,簡單適當地運用快速冪即可通過。

#include

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using

namespace std;

typedef

long

long ll;

int t, m, h, a, b, num;

ll pow

(ll m, ll k, ll p)

return num;

}int

main()

cout << num <<

'\n';}

return0;

}

資料比較大,運用快速冪。求用公式2^(n-1)-1求非空子集個數

#include

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using

namespace std;

typedef

long

long ll;

int n, t;

ll pow (ll m,ll k,ll p)

return num;

}int

main()

return0;

}

這道題是聽同學講的,總錢數為x,乙個人分的錢是n,那麼其他的人就是x-n,若n>x-n,那麼就要輸出這個人的工號了。

#include

#include

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using

namespace std;

typedef

long

long ll;

int n, x, arr[

10005

], fly;

intmain()

for(

int i =

1; i <=

10000

; i ++)}

if(fly) cout <<-1

<<

'\n';}

return0;

}

運用快速冪求次方,再對10取餘就可。

#include

#include

#include

using

namespace std;

typedef

long

long ll;

int n , x;

ll dpow (ll m,ll k,ll p)

return res;

}int main (

)return0;

}

和e題類似,運用快速冪求a的b次方,在對1000取餘。

#include

intfastpow

(int a,

int b,

int k)

b >>=1;

a= a*a%k;

}return ans;

}int

main()

return0;

}

找零的個數的方法:乙個零可以分為5*2,即想知道末尾存在幾個零,只需知道末尾有幾個五。運用二分查詢找出五的個數即可。

#include

#define ios ios::sync_with_stdio(false);

using

namespace std;

typedef

long

long ll;

int t, q, flag, x, l, r;

ll check

(int m)

return cnt;

}// 檢查m的階乘裡有多少個5,即階乘後零的個數

intbsearch

(int l,

int r)

return l;

}// 二分法 ,確定上下限、搜尋是否有符合條件即階乘結果含q個零的mid

intmain()

return0;

}

#include

#include

#include

#include

#define pi acos(-1)

using namespace std;

typedef long long ll;

const ll maxn = 1e6 + 10;

int t, n, f;

double arr[maxn];

bool judge(double x)

return cnt >= f;

}int main()

l = r / f;

while (r - l > 1e-5)

printf("%.4lf\n", l);

}return 0;

}運用二分查詢,不難找到x的值

#include

#include

using

namespace std;

int t, y;

double x, l, r, mid, flag;

double

check

(double x)

intmain()

elseif(

check

(mid)

> y)

r = mid;

else l = mid;}if

(flag ==-1

)printf

("no solution!\n");

else

printf

("%.4lf\n"

,flag);}

return0;

}

二分題,先做字首和,,再用二分查詢子串行的終點,取最小長度即可。

#include

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

using

namespace std;

int t, arr[

100005

], n, s, flag;

intmain()

if(flag == n +1)

cout <<

0<<

'\n'

;else cout << flag <<

'\n';}

return0;

}

公開課,演算法導論筆記 自用)

一 演算法,是軟體的根本要素,如貨幣可購買商品一樣 演算法可以獲得軟體的其他方面的提公升 演算法的學習應先從分析已有的演算法開始,二 排序為演算法中最傳統的基礎的演算法 2.1插入排序 a j 將定位的j位置元素向前移動判斷插入位置,使得該陣列的前半部分有序 j取值從第二個元素開始,直到最後乙個 如...

普林斯頓公開課 演算法2 7 棧

棧和佇列都是乙個元素的集合,都能提供增加 刪除 迭代 判斷是否為空4個操作。在棧中,刪除操作刪除的是最後新增的元素。在佇列中,刪除操作刪除的是最早新增的元素。push pop isempty 將乙個鍊錶中第乙個節點刪掉,並將第二個節點設為首節點。將新的節點加入到鍊錶的頭部。在最壞情況下,每個操作的複...

AI公開課丨李楠博士帶你入門整合學習(第二期)

整合學習方法,一直是整個機器學習領域的 常青樹 受到學界與業界的廣泛關注。隨著南京大學周志華教授的專著 整合學習 基礎與演算法 中文版上市,讓我們能夠有機會系統的學習這一經典的機器學習方法。為了更好的幫助廣大讀者們學習 了解整合學習,博文視點學院聯合機器之心,特邀 整合學習 基礎與演算法 一書譯者李...