light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对  素因数分解

H - Pairs Forming LCM

Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu

Submit Status Practice LightOJ 1236

Description

Find the result of the following code:

long long pairsFormLCM( int n ) {
    long long res = 0;
    for( int i = 1; i <= n; i++ )
        for( int j = i; j <= n; j++ )
           if( lcm(i, j) == n ) res++; // lcm means least common multiple
    return res;
}

A straight forward implementation of the code may time out. If you analyze the code, you will find that the code actually counts the number of pairs (i, j) for which lcm(i, j) = n and (i ≤ j).

Input

Input starts with an integer T (≤ 200), denoting the number of test cases.

Each case starts with a line containing an integer n (1 ≤ n ≤ 1014).

Output

For each case, print the case number and the value returned by the function 'pairsFormLCM(n)'.

Sample Input

15

2

3

4

6

8

10

12

15

18

20

21

24

25

27

29

Sample Output

Case 1: 2

Case 2: 2

Case 3: 3

Case 4: 5

Case 5: 4

Case 6: 5

Case 7: 8

Case 8: 5

Case 9: 8

Case 10: 8

Case 11: 5

Case 12: 11

Case 13: 3

Case 14: 4

Case 15: 2

题意:对给定的n,求符合lcm(a,b)==n的(a,b)的数对的个数。
思路:对n进行素数分解,a和b与n对应分解
n=p1^e1*p2^e2*...*pk^ek;
a=p1^a1*p2^a2*…*pk^ak
     b=p1^b1*p2^b2*…*pk^bk
对于a,b它们的最小公倍数为n,则a1<=e1,b1<=e1,则(a1,b1)有2*(e1+1)-1对则总的对数有t=(2*e1+1)*(2*e2+1)....,其中除了(n,n),其他的都重复了两次则答案为(t+1)/2.
注意由于n的范围是10^14,因此素数筛到10^7,然而还是会漏过素因子,但显然只会漏过最多一个素因子,因为sqrt(10^14)==10^7,如果有两个大于10^7的素因子,根据素数分解公式,必定含有这两个大于10^7的素因子,相乘一定大于10^14大于n,与分解等式矛盾。因此只需最后特判最后一个即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<string>
#include<math.h>
#include<cctype>using namespace std;typedef long long ll;
const int maxn=10000100;
const int INF=(1<<29);
const double EPS=0.0000000001;
const double Pi=acos(-1.0);int T;
ll n;
vector<ll> prime;
bool isprime[maxn];void play_prime()
{memset(isprime,1,sizeof(isprime));isprime[1]=0;for(int i=2;i<maxn;i++){if(!isprime[i]) continue;for(int j=i*2;j<maxn;j+=i) isprime[j]=0;}for(int i=1;i<maxn;i++) if(isprime[i]) prime.push_back(i);
}int main()
{int tag=1;cin>>T;play_prime();while(T--){cin>>n;ll ans=1;for(int i=0;i<prime.size()&&prime[i]<=n;i++){ll t=prime[i];int cnt=0;while(n%t==0){n/=t;cnt++;}ans*=(2*cnt+1);}if(n>1) ans*=(2*1+1);ans=(ans+1)/2;printf("Case %d: %lld\n",tag++,ans);}return 0;
}

View Code

转载于:https://www.cnblogs.com/--560/p/4552948.html

light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对 素因数分解相关推荐

  1. 离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

    需要在开头提前说明,本篇文章仅仅用于在学习初等数论或者离散数学时候对算术基本定理的理解,实际应用的时候把结论告诉大家,想求最大公约数就用欧几里得算法是最简单的,在本篇不再赘述,有机会我会在其他文章中说 ...

  2. Problem B: 编写函数:求最大公约数gcd()和最小公倍数lcm() (Append Code) 山东科技大学 oj

    题目描述 辗转相除法,也称欧几里得算法,是求最大公约数的算法.辗转相除法首次出现于欧几里得的<几何原本>(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的<九章算术> ...

  3. C语言求二个数的最大公约数gcd和最小公倍数lcm(附完整源码)

    求二个数的最大公约数和最小公倍数 实现以下接口 实现卡最大公约数和最小公倍数完整源码(定义,实现,main函数测试) 实现以下接口 int gcd(int a, int b);//求最大公约数 int ...

  4. 算法练习一:求最小公倍数

    求最小公倍数, 两个数的乘积=2个数的最大公约数*最小公倍数 最大公约数的求法:辗转相除法. 2个数a和b,最大公约数等于a/b的余数r和b的最大公约数, 如果r余数为0则b为最大公约数 privat ...

  5. 最大公约数(gcd)和最小公倍数(lcm)的多种解法 Java 实现

    下面总共介绍了四种最大公约数的求解方法和一个最小公倍数的求解方法 该代码的视频讲解 [300题刷题挑战]leetcode力扣 最大公约数和最小公倍数的多种解法 GCDandLCM第八十三题 | 数学方 ...

  6. (hdu step 2.1.1)最小公倍数(使用最大公约数来辅助求最小公倍数)

    题目: 最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. python求最小公倍数_python求最大公约数和最小公倍数的简单方法

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  8. JavaScript求最小公倍数

    文章出自个人博客https://knightyun.github.io/2019/09/03/js-lcm,转载请申明. 最小公倍数(Least Common Multiple) 最小公倍数是中学数学 ...

  9. Python最大公约数gcd、最小公倍数lcm

    1. 最大公约数 最大公约数(Greatest Common Divisor)缩写为GCD 这里求最大公约数的方法为辗转相除法 a, b = map(int, input('请输入两个数字,其间用空格 ...

最新文章

  1. R语言ggplot2可视化:使用ggrepel包在线图(line plot)的尾端那个数据点添加文本标签(text label)
  2. windos 为什么会突然服务停止了_Windows服务异常自动关闭
  3. Mac 实现可以在 Finder 下直接打开 iTerm2 并跳转到当前目录
  4. Python 第三方模块之 psutil - 获取系统运行的进程和系统利用率信息
  5. 236 Lowest Common Ancestor of a Binary Tree
  6. 学习笔记之awk用法
  7. python3.7读取csv文件_Python3 读取csv文件
  8. 组合数据浅析之“幻方”
  9. java类型强转会有性能消耗吗_Java代码性能优化总结(转)
  10. 爱普生传真服务器网页,爱普生传真机如何发传真 爱普生传真机快速发传真技巧【详解】...
  11. 2022中兴捧月图像去噪赛道结果小结
  12. Kafka-3.0.1-Docker+集群 踩坑笔记
  13. WPS添加宋体等字体问题
  14. 台式计算机怎样时间同步,电脑时间同步,详细教您怎么让电脑时间和网络时间同步...
  15. 电脑没有长截图功能,一招即可截下来!如何用电脑做长截图
  16. 面试拿到外包公司offer该不该去?!
  17. 未来的事业计算机工程师英语作文,英语作文:我未来的事业 My Future Career
  18. Metaverse 元宇宙入门-02-Hardware 硬件与元宇宙
  19. 张寓博当选山东省收藏者协会副主席兼美术评论委员会主任
  20. 【公开课预告】:如何借助Google Cloud在海外部署音视频业务?

热门文章

  1. A - 顺序表应用1:多余元素删除之移位算法
  2. B - 数字三角形问题
  3. 非线性薛定谔方程_五分钟彻底搞懂“薛定谔方程”,看后绝对不在迷惑了
  4. android控件之间的过渡动画效果,Android - 交换控件位置:基于LayoutParams的瞬间交换与基于ObjectAnimator动画效果交换...
  5. atop用法_linux高级监控atop的使用
  6. 清空div中的内容而不刷新整个页面_Vue中的$nextTick机制
  7. vue template 复用_Vue之组件、路由
  8. chrome查看网站字符集编码的方法(不需要安装charset)
  9. oracle删除临时表空间语句,Oracle中临时表空间的清理
  10. scrapy自定义Request的缓存策略(减少内存占用)