zoukankan      html  css  js  c++  java
  • 唯一质因数分解定理

    唯一质因数分解定理:
    任意一个合数a仅能以一种方式,写成如下的乘积形式:
    (a) =$ p1^{e1} imes p2^{e2} imes ... imes pr^{er}( )a$的因子数= ((e1+1) imes (e2+1) imes .... imes (er+1))

    const int N = (int)2e5 + 7;
    int noprime[N], pcnt, p[N / 2];
    int nump[N / 2], yinzi[N / 2];
    int n, m, top;
    void getprime(){
        pcnt = 0;
        memset(noprime, 0, sizeof(noprime));
        noprime[0] = noprime[1] = 1;
        for(int i = 2; i < N; ++i) {
            if(!noprime[i])p[pcnt++] = i;
            for(int j = 0; j < pcnt && i * p[j] < N; ++j) {
                noprime[i * p[j]] = 1;
                if(i % p[j] == 0)break;
            }
        }
    }
    void cal(int t){
        memset(nump, 0, sizeof(nump));
        top = -1;
        int tmp = (int)sqrt(t*1.0);
        for(int i = 0; i < pcnt && p[i] <= tmp; ++i) {
            if(t % p[i] == 0) {
                yinzi[++top] = p[i];
                while (t % p[i] == 0) {
                    nump[top] ++;
                    t /= p[i];
                }
            }
            if(t == 1)break;
        }
        if(t > 1) {
            yinzi[++top] = t;
            nump[top] ++;
        }
    }
    

    欧拉筛解释:

    (i)(prime[j])的整数倍时((i \% prime[j];==;0)),跳出循环。

    因为(i)可以看做(prime[j]*某个数)(i*prime[j+1])就可以看做(prime[j]*某个数*prime[j+1])(prime[j]) 又小于 (prime[j+1])

    所以 (i*prime[j+1]) 将来必定会被 (prime[j]*另一个i) 给筛掉,这里就不用再做了。

    同时我们可以发现在满足程序里的两个条件的时候,(prime[j])必定是(prime[j]*i)的最小质因子。

  • 相关阅读:
    [转]ExtJs 中 xtype 与组件类的对应表
    [转]通过命令行处理图形
    Windows下删除.svn文件夹的最简易方法
    tomcat 设置缓存大小
    二月份的精选奇趣网站(收藏轉)
    stage.focus
    利用键盘按键操控地图
    flash 随机函数
    flash as 3.0 制作一个旋转 影片剪辑
    in关键字的使用
  • 原文地址:https://www.cnblogs.com/Cwolf9/p/9513229.html
Copyright © 2011-2022 走看看