Algorithm 求和为k的倍数的对
假设我有一组Algorithm 求和为k的倍数的对,algorithm,Algorithm,假设我有一组N(N我至少看到两件事: 首先,在这方面: ++c[(int)j%K];//storing remainder in array 我很确定它会在实际执行%操作之前对int进行强制转换(但不是100%确定) 其次,在代码的其余部分,对于所有的count=…行,您在ints上进行算术运算,然后将结果分配给long。直到算术运算完成后,才会对long执行隐式转换。因此,如果运算溢出int,则最终会溢出由于然后铸造到长 如果您想解决这个问题,您必须在右侧显式地对long执行强制转换,以确保
N
(N我至少看到两件事:
首先,在这方面:
++c[(int)j%K];//storing remainder in array
我很确定它会在实际执行%
操作之前对int
进行强制转换(但不是100%确定)
其次,在代码的其余部分,对于所有的count=…
行,您在int
s上进行算术运算,然后将结果分配给long
。直到算术运算完成后,才会对long
执行隐式转换。因此,如果运算溢出int
,则最终会溢出由于然后铸造到长
如果您想解决这个问题,您必须在右侧显式地对
long
执行强制转换,以确保没有任何算术运算对两个int
s进行操作。(尽管除非您有内存限制,否则最好在任何地方都使用long
s,而不是int
s,除了j
和K
)嗨。要求人们发现代码中的错误不是特别有效。您应该使用调试器(或添加打印语句)通过跟踪程序的进度,并将其与预期发生的情况进行比较,来隔离问题。一旦两者出现分歧,您就发现了问题。(如果必要,您应该构建一个解决方案。)@OliCharlesworth:我试着在这里解释我的代码。我试着调试它,然后只是在这里发布代码,因为我无法解决问题。谢谢,我怎么能跳过它!因为N
会相当大,我想把N
和count
作为long
就足够了。K
wo我很确定你想要c
成为long[]
太多了,否则对其元素的操作可能会溢出。好吧。我会试试。还有,我有什么办法可以加快算法?使用上述算法,N
&K
的大值大约需要10-12秒。是的,我在发布后意识到,如果必须对每个元素执行某些操作,我不确定还能做什么其他优化单个对;您已经只在实际解决方案中循环(而不是进行浪费性检查)
++c[(int)j%K];//storing remainder in array