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