「学习笔记」分解质因数

Before said#

本文涉及唯一分解定理,这个在之前的最大公因数那篇中提到了,可以去看一下,不过在本文我还是会在复述一遍

唯一分解定理#

定义:任何一个大于 1 的自然数 N,如果 N 不为质数,那么 N 可以唯一分解成有限个质数的乘积 N=P1a1P2a2P3a3......Pnan,这里 P1<P2<P3......<Pn均为质数,其中指数 ai 是正整数。这样的分解称为 N 的标准分解式。
代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

inline ll read() {
	ll x = 0;
	int fg = 0;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		fg |= (ch == '-');
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = (x << 3) + (x << 1) + (ch ^ 48);
		ch = getchar();
	}
	return fg ? ~x + 1 : x;
}

const int N = 1e7 + 5;

int n;
int num[N];

int main() {
	n = read();
	int maxn = sqrt(n) + 0.5;
	printf("%d = ", n);
	for (int i = 2; i <= maxn; ++ i) {
		if (n < i)	break;
		while (n % i == 0) {
			n /= i;
			printf("%d * ", i);
		}
	}
	if (n != 1) {
		printf("%d\n", n);
	}
	else {
		printf("1\n");
	}
	return 0;
}

这个算法是 On,如果能提前打出质数表,复杂度会更优秀!

性质#

前提:如果一个正整数 N,他的标准分解式为 N=p1a1p2a2p3a3pnan
1、它的正因数个数 σ(N)=(1+a1)(1+a2)(1+a3)(1+a4)(1+an)
证明:对于 p1 来说,选的个数有 a1+1 种,即0,1,2,3,,a1,其他的质因数同理,最后用乘法原理即可
2、它的正因数之和 σ(N)=(1+p1+p12++p1a1)(1+p2+p22++p2a2)(1+pn+pn2++pnan)
证明:你把这个式子拆开就行了
3ab=gcd(a,b)×lcm(a,b)
这个在最大公因数那篇文章中证过,这里不再证了

作者:yifan0305

出处:https://www.cnblogs.com/yifan0305/p/17040937.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载时还请标明出处哟!

posted @   yi_fan0305  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示