题目链接:点击打开链接
题意:
首先给定数组中有多少个数,只告诉你他们最小值为1,不告诉你每个数字是多少,要求根据给定区间中数的最大公约数,复原原来的序列。
思路:
先把所有的数初始化为1,然后根据指定问题,如果某一区间的最大公约数是ans, 那么这个区间中的所有数字都是ans的倍数,所以,把区间中的每个数字都赋值为原数字和ans的最小公倍数即可。
这道题本来是一道水题,但由于自己的粗心而导致在比赛中一直是wrong answer。错误的原因就是数据类型用错了。首先看到数据范围是10的9次方,在int范围内(int范围是2的32次方比 4 乘以10的9次方多一点),所以我就考虑使用int行来保存数组中的所有数字,但由于在求最小公倍数是涉及到两个数的乘法,所以有可能会超出int的范围,本来很好处理的问题,但我竟然又声明了一个long long int 的变量用来保存两个int型数据的乘积,这样做是愚蠢的,因为两个int型数据相乘时结果还是int型,用long