(这是从最近完成编程竞争衍生)减少整数级分算法
您给出的10^5整数两个阵列在范围1..10^7包括:
int N[100000] = { ... }
int D[100000] = { ... }
设想有理数X是N的所有元素相乘并除以D的所有元素的结果。
修改两个数组而不更改X的值(并且不指定任何元素超出范围),例如N的产物和D的产物没有共同点n因素。
一个天真的解决方案(我认为)会工作会...
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 100000; j++)
{
int k = gcd(N[i], D[j]); // euclids algorithm
N[i] /= k;
D[j] /= k;
}
...但是这太慢了。
什么是少于10^9左右的解决方案?
http://stackoverflow.com/questions/12359785/reducing -integer-fractions-algorithm-solution-explanation –
不确定为什么您发布了带有答案链接的问题。 –
@RaymondChen:当我发布这个问题时,我没有解决方案代码,并且当我得到它时我不明白解决方案代码,因此发布了单独的问题以供解释并将它们相互关联。 –