【數論學習筆記】 約數(待補)
阿新 • • 發佈:2019-05-10
str 除法 歐幾裏得 style 學習筆記 ron lcm 分解 說了
定義:
都是廢話,就不說了。
N的正約數集合——試除法:
依舊是試除法,和求質因數的分解基本一樣,不過要掃描1到sqrt(n),而且若d為N的約數,N/d也會是約數。代碼有空再放。
求1到N每個數的正約數集合——倍數法
對於每一個以d為約數的數,就是d的倍數,通過翻倍來求出。代碼如下。
vector<int> factor[500010]; inline void bei(int n){ for(int i=1;i<=n;i++) for(int j=1;j<=n/i;j++) factor[i*j].push_back(i); for(int i=1;i<=n;i++){ for(int j=0;j<factor[i].size();j++) printf("%d ",factor[i][j]); puts(""); } }
最大公約數:
gcd(a,b) 表示 a 和 b 的最大公約數,lcm(a,b) 表示a和b的最小公倍數。gcd(a,b)*lcm(a,b)=a*b。
更相減損術:a>b gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) gcd(2a,2b)=2gcd(a,b)。
歐幾裏得算法:gcd(a,b)=gcd(b,a mod b)
int gcd(int a,int b){ return b ? gcd(b,a%b) : a; }
【數論學習筆記】 約數(待補)