题目链接

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

题面

思路

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

详情请看代码

代码

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fint 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 <= x; ++i) {if(x % i == 0LL) return false;}return true;
}
vector<ll> V;
ll cnt[N];void slove(ll x){for(ll i = 2;i * i <= x; ++i) {ll res = 0;while(x % i == 0) {res ++;x /= i;}cnt[i] = max(cnt[i],res);}cnt[x] = max(cnt[x],1LL);
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);cin>>l>>r;while(l <= r){if(!is_prime(l)) break;l++;}if(l > r) {cout<<-1<<endl;return 0;}ll gcd = 0;for(ll i = l;i <= r; ++i) {if(!is_prime(i)){slove(i);}}ll ans = 1LL;for(int i = 1;i <= 30000; ++i) {for(int j = 1;j <= cnt[i]; ++j) {ans = (ans * i) % mod;}}cout<<ans<<endl;return 0;
}

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

  1. 合数分解质数c语言算法,合数分解成质数之和问题探究

    合数分解成质数之和问题探究 1.将一个合数分解成多个质数,使分解的各个质数均不等.它们的和等于该合数,且它们中最大的质数最小 算法:DP,背包问题,复杂度约为O( (N/10)^2 ) 程序代码:#i ...

  2. 判断质数和合数的java_质数与合数知识点总结(质数和合数的知识点)

    (2)要判断一个自然数是否是素数,你可以把它从小到大去掉,所有的素数都小于它,除了商小于除数,还有余数,它是素数,否则它不是素数. 例1.写出100以内的素数和复合数. 解决方案: 例2.在括号中填入 ...

  3. python输入一个整数、输出该整数的所有素数因子_【401】Python 求合数的所有质数因子...

    对于这样的一个题目来说,出看来,可能会想到判断是否为质数,但其实并不需要. 只要按照从2开始遍历,只要遇到可以整除的就是想要的质数,理由是,如果遇到合数的话,那么在此之前一定会遇到这个合数的质因子,因 ...

  4. 欧拉计划3-找出一个合数的最大质数因子

    题目: 13195 的质数因子有 5, 7, 13 和 29. 600851475143 的最大质数因子是多少? 分析:刚开始写的时候,很麻烦,首先写了一个prime函数,然后又在主函数里写了一个循环 ...

  5. 求一个区间内所有的质数(C++实现)

    #include <iostream> #include <math.h> using namespace std;void main() {int i, j, k;for ( ...

  6. 欧拉工程第三题 找出一个合数的最大质数因子

    题目: 13195的质数因子有5,7,13和29. 600851475143的最大质数因子是多少? 解题方法: 本次求解过程使用了一个比较聪明的做法,这也是经过仔细思考之后才想出来的,当然也是受到了某 ...

  7. 2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)

    1.I-A+B问题 模拟,类似于高精度,竖式运算 #include<bits/stdc++.h> using namespace std; typedef long long LL; in ...

  8. 【C++】找最大公约数、找最小公倍数(分数的通分、约分)、素数、合数、公因数

    文章目录 找最大公约数.找最小公倍数(分数的通分.约分) C++如何找最大公约数(约分)(最大公因数) C++如何找最小公倍数(通分) 应用-找连续区间内的最大公因数 应用-分数加减算法 素数.合数. ...

  9. python输出所有素数_Python程序打印一个区间内所有质数

    Python程序打印一个区间内所有质数 在这个程序中,您将学习使用for循环打印一个区间内的所有质数并显示它. 要理解此示例,您应该了解以下Python编程主题: 一个大于1的正整数,除了1没有其他因 ...

最新文章

  1. microsoft 官方学习资源
  2. 《Go语言圣经》学习笔记 第三章 基础数据类型
  3. COMBO--组合拳打穿回调地狱~
  4. vscode中安装webpack_webpack项目配置流程
  5. 如何从一个 C# 的 dump 中挖到机器相关的信息?
  6. 服务器此时无法接受控制信息,您无法修改域或信任信息,因为无法联系一个主域控制器(PDC)仿真器,请确认当前域的PDC仿真器和网络都联机并正常运行。...
  7. “618”台前幕后的那些事
  8. SQLi LABS Less-8 布尔盲注
  9. com.alibaba.fastjson.JSONObject之对象与JSON
  10. 返回空的list集合*彻底删除删除集合*只是清空集合
  11. 手把手教使用阿里云短信接口发送短信验证码
  12. MathJax 支持的 Latex 符号总结
  13. 【DP】洛谷 P1510 精卫填海
  14. [分享]来自CSDN的精华网址
  15. 华为路由器子接口,vlan
  16. 高通MSM8998 ABL的调试
  17. weblogic 打补丁
  18. 【excel】SUMIF合并单元格
  19. whaleCTF-30days-隐写【第二期】-彩虹糖-writeup
  20. 肾有多好,就有多年轻

热门文章

  1. 谈谈自己对投影、SVD和傅里叶变换的理解
  2. PyTorch 中如何指定GPU
  3. JavaScript Break 和 Continue 语句
  4. JavaScript中大数相加的解法
  5. 扎实基础深入篇(七):函数和类没那么复杂
  6. on where having总结
  7. Vue模板 script部分
  8. 《编程之美》第2刷勘误
  9. NGINX api网关(mark 有空填坑)
  10. C#设计模式(20)——策略者模式(Stragety Pattern)