分析思路:
1:最简单的办法是求出所有正整数序列的最小公倍数,然后与输入的m值进行比较;
2:利用递归的办法进行解决:依次求出两个正整数的最小公倍数,比对此时的最小公倍数是否与输入的m值相同?
1):相同则后面不再进行求最小公倍数,而是用此最小公倍数除以后面的正整数序列,一旦有余数不为0的情况发生,则说明此m不是最小公倍数;
2):不同的话,则用此最小公倍数作为一个输入的正整数,再取后面的正整数序列中的一个值(依次取),求其最小公倍数,然后转入1);如果在2)中已经取到最后正整数序列中的最后一个整数,且此时计算的最小公倍数依旧和m不同,则认为此时m不是其正整数序列的最小公倍数;
依旧以上两种思路就可以完成此题目的要求,但是是否是最好的算法有待考证!
到此时则问题已经转为怎么求两个正整数的最小公倍数的问题?最小公倍数如何求呢?最小公倍数=两个数的乘积除以两个数的最大公约数,所以问题又转为如何求两个数的最大公约数问题;最大公约数的算法有两种,如下所示:
一:辗转相除法
假设存在A和B两个正整数(且A>B),那么令R= A % B,R和B分别取代原来的B和A,重复取余工作,直到R=0(表明那个A就是最大公约数)。
二:辗转相减法
假设有两个数(A,B)且A大于B,令 D = A - B,将D和B再次按照大小代入A和B中,由大数减去小数……这样辗转相减,直到A=B,此时A或者B就是最大公约数。
至此要解决此问题的所有难点已经解决,然后就是编码的问题了。(编码后期补充)