【发布时间】:2016-08-15 01:45:22
【问题描述】:
我正在尝试完成来自hackerrank.com 的编码挑战
Shashank 是一个数学新手,知道给定的基数 N 的 l 有 (2N - 1) 个非空子列表后,他非常兴奋。他记下给定集合 A 的所有非空子列表。对于每个子列表,他计算 sublist_sum,它是元素的总和,并用 S1、S2 表示它们sub>, S3, ... , S(2N-1).
然后他定义了一个 special_sum,P。
P = 2S1 + 2S2 + 2S3 .... + 2S(2N-1) 并报告 P % (10^9 + 7)。
OUPUT 打印 special_sum,P 模 (10^9 + 7)。
我几乎可以肯定我误解了提示,但我的程序旨在接收数字列表。程序会将此列表的所有组合(不重复,顺序无关紧要,所有大小)的 2 提高到幂,然后将它们加在一起并打印出来。
网站上的例子是
列表
1, 1, 2输出44说明
- {1} 和 2^1 = 2
- {1} 和 2^1 = 2
- {2} 和 2^2 = 4
- {1,1} 和 2^2 = 4
- {1,2} 和 2^3 = 8
- {1,2} 和 2^3 = 8
- {1,1,2} 和 2^4 = 16
所以总数将是 44;
我对仅将指数相加的理解是错误的,因为答案远大于第一个测试用例中的预期答案(显然)。
输入
422 412 417 497 284输出 67920854
基本上,我希望有人解释提示。我想我只是在计算部分总和,但我不知道什么时候或我想mod 10^9 + 7。
仅供参考,我只完成了代数 II,所以如果我错过了一个数学概念,请在向我解释时记住我的经验。我一直在用 C++ 编程,所以首选该语言的代码示例。
代码我可怜的解决方案:http://pastebin.com/c7YxCLMt
【问题讨论】:
-
"解释提示。"什么?我可以向你保证,2 的 422 次方将比 67920854 大得多。这个问题的第一部分相当清晰;但是在它中途掉下悬崖......完全省略minimal reproducible example也没有帮助。
-
对不起。我真的不知道该转向哪里。我的问题是概念性的,所以我的源代码没用。我将添加完整的提示
-
不幸的是,stackoverflow.com 不用于讨论概念问题。但是,更确切地说,是针对特定的技术问题和答案。
-
部分挑战在于弄清楚如何理解问题。
2^422是一个非常大的数字。您无法使用简单的操作来计算它。因此,挑战在于看看您是否可以弄清楚如何“重构数学”,以便您可以提供一个简单的计算解决方案。 如果其他人为您解决问题,这将不是您的挑战。 ;) -
sum 的模是模的和。 (4 + 4) mod 3 = 2 = 4 mod 3 + 4 mod 3。所以你只知道如何从 2^N mod XXX 计算模数,然后求和,这是一个简单的问题