zoukankan      html  css  js  c++  java
  • 枚举一个数$n$的所有质因子

    考虑先前的预处理欧拉筛。
    由于我们得到的(i*pri[j])(pri[j])一定是(i*pri[j])的最小质因子。
    所以我们可以用数组顺便存储一个数的最小质因子,并存一下之后跳到的位置。
    (i%pri[j]==0),则跳到(to[i]),否则跳到(i)

    (Code)

    void prepare() {
    	fo(i, 2, n) {
    		if (! label[i]) pri[++tot] = i, mi[i] = i;
    		fo(j, 1, tot) {
    			if (i * pri[j] > n) break;
    			label[i * pri[j]] = 1;
    			mi[i * pri[j]] = pri[j];
    			to[i * pri[j]] = (i % pri[j] == 0) ? to[i] : i;
    			if (i % pri[j] == 0) break;
    		}
    	}
    }
    

    不过似乎常数较大,某道题暴力枚举质因子判断过了,但用上述方法惨烈(TLE)。。。

  • 相关阅读:
    堆排序算法
    二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
    hdoj1010 奇偶剪枝+DFS
    常见排序算法c++总结
    B
    C
    D
    E
    G
    F
  • 原文地址:https://www.cnblogs.com/jz929/p/13869940.html
Copyright © 2011-2022 走看看