您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

区间合数的最小公倍数(质数+因数分解)

MangataTS 发布时间:2022-02-09 13:37:43 ,浏览量:0

题目链接

https://ac.nowcoder.com/acm/contest/23479/J

题面

在这里插入图片描述

思路

对于多个数的最小公倍数,我们可以通过唯一分解定理将每个合数进行拆分,然后统计每个质因子的数量,对于每一个质因子数量我们取到最大即可,换句话说也就是统计区间内合数的唯一分解后的每一个质因子数量最多的质因子,然后最后将这些质因子乘起来 例如, a = 2 3 ∗ 3 5 ∗ 5 1 a=2^3*3^5*5^1 a=23∗35∗51 , b = 2 4 ∗ 3 1 ∗ 5 2 b=2^4*3^1*5^2 b=24∗31∗52 ,那么它们的最小公倍数就是 2 4 ∗ 3 5 ∗ 5 2 2^4*3^5*5^2 24∗35∗52 ,也就是每个素数的幂取最大值。

详情请看代码

代码
#include
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair
#define INF 0x3f3f3f3f

int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

ll ksm(ll a,ll b) {
	ll ans = 1;
	for(;b;b>>=1LL) {
		if(b & 1) ans = ans * a % mod;
		a = a * a % mod;
	}
	return ans;
}
ll inv(ll x){
	return ksm(x,mod-2);
}
ll quick_pow2(ll x, ll n) {
	ll res = 0;
	x%= mod;
	n%= mod;
	while(n) {
		if(n & 1) {
			res = (res + x) % mod;
		}
		x = (x%mod + x%mod) % mod;
		n >>= 1;
	}
	return res%mod;
} 

ll lowbit(ll x){return -x & x;}

const int N = 2e6+10;
//----------------自定义部分----------------
ll l,r;

bool is_prime(ll x){
	if(x == 1LL || x == 0LL) return true;
	for(ll i = 2LL;i * i l>>r;
	while(l  r) {
		cout            
关注
打赏
1665836431
查看更多评论
0.0441s