1. 程式人生 > >【數論學習筆記】 約數(待補)

【數論學習筆記】 約數(待補)

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;
}

【數論學習筆記】 約數(待補)