数论 a+b=n与lcm(a, b)=m
// 本文主要参考 https://blog.csdn.net/Shinaria/article/details/79049838
//部分参考 https://blog.csdn.net/acoolgiser/article/details/81188440
题目是这样的:
给定两个正整数n和m,找到满足条件的合适的a和b:
1. a+b=n
2.lcm(a, b)=m
神奇的是 由 1,2可得 gcd(a,b)==gcd(n,m)
证明:设 gcd(a,b)=g
则 a=a' * g b=b' * g 其中 a',b' 互质且无需在乎其大小
因为如果他们不互质的话,g/他们的公因数 才是他们的最小公倍数。
所以 由 lcm 与 gcd 的关系可得
m=g * a' * b'
n=g*(a' + b')
易证: a' * b' 和 (a' + b') 互质,因为能 整除 a' * b' ,就只有能同时整除a' 和整除b',所以他的因数就只有 a'和b',但 两者是互质的,所以无论他们怎么组合都得不到 a'+b'
所以 m,n 最大公因数也是 g,证毕。
另外在做这道题时,需要用到 sqrt 函数,当时我并没有认真考虑根号下是负数的情况,在我看了别人的代码时才想到这一点。
但其实是没必要考虑的,因为 sqrt 函数在处理负数时会 返回 -nan(ind)
nan 是 "not a number" 的缩写, 即计算结果 不是个 数。
ind 是 indeterminate 的缩写,即无法确定 是什么。
对负数开平方,对负数取对数,0.0除以0.0,0.0乘无穷大∞, 无穷大∞除以无穷大∞ 等错误都会 得 到 它。
我在 math.h的头文件里 找到了其函数声明 _Check_return_ _CRT_JIT_INTRINSIC double __cdecl sqrt(_In_ double _X);
具体看不懂,不过可以知道,其形参和返回值都是 double 类型
于是在 vs2015上试了一下
int a = -4; printf("%lfn", (double)sqrt((a))); printf("%lfn", (double)sqrt(double(-4))); printf("%dn", (double)sqrt(double(-4))); printf("%d", (int)sqrt(double(-4)));
结果是:
-nan(ind)
-nan(ind)
0
-2147483648
我不太明白为什么 int 不报错 ,猜测是发生了隐式转换吧,这个不太懂。
好吧,就这样。
相关知识
杨辉三角如何确定ab的次数?例如:(a+b)²=a²+2ab+b²(a+b)³=a³+3a²b+3ab²+b³问:(a+b)n次方中的ab的次数如何确定,
已知向量 a 与向量 b,m 是个常数,那么m(a+b)=ma+mb
旅游|河内四大户外摄影花海 Bốn địa điểm chụp ảnh ngàn hoa lớn nhất Hà Nội
PTA所谓水仙花数是指一个m位数 输入一个3位数n,输出所有介于100至n之间的位数为3的水仙花数 求1到正整数n之间的偶数之和,输出结果后换行。
已知a、b为正整数,且a+b=1,求(a+1/a)*(b+1/b)>=25/4
设A为m×n矩阵,x、b均为m维列向量,y为n维列向量.证明:Ay=b有解的必罗
python 水仙花数 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。
什么情况下a+b的最小值是“根号下2ab”?我知道a>0,b>0,当取到等号时a=b.我们都知道正数a和正数b,a+b的最小值是“根号下2ab”,当a=b时取到最小值,那么前提条件是什么?前提条件是ab的乘积是固定常数还
春节到了分享一哈,用代码画一束玫瑰花
下列各花的象征意义(连线):牡丹依恋松柏门生菊花富贵荷花清白桃李故乡桑梓坚贞垂柳不畏风霜
网址: 数论 a+b=n与lcm(a, b)=m https://www.huajiangbk.com/newsview1182683.html
上一篇: 5欧元=7美元45元人民币=55 |
下一篇: 苦刺花、甜菜、皂角芽、刺老包…… |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039