【问题标题】:Sample testcase for Interviewstreet: EquationsInterviewstreet 的示例测试用例:方程式
【发布时间】:2011-12-28 01:02:24
【问题描述】:

所以有一个名为 interviewstreet.com 的网站。在这里,我们可以找到具有挑战性的编程问题。很遗憾,您必须先登录才能查看问题。

以下是我试图解决的问题的简要说明:

找出方程 (1/x) + (1/y) = 1/N! 的正积分解的数目(读取 1 乘 n 阶乘)打印一个整数,它是模 1000007 的正积分解的数目。

例如当N=3,(x,y)可以是:(7,42),(9,18),(8,24),(12,12),(42,7),(18,9),(24,8)。或者我是这么想的。

请帮助我,尤其是解决了这个问题的你。我刚刚为问题方程编码。我的算法有问题,我可以要求输出前 10 个整数吗?即N=2N=3N=4 ...N=10,这样我就可以找出算法中的缺陷。谢谢:)

编辑:哦,请不要发布解决方案代码,因为它会破坏我和试图解决这个问题的人的乐趣:)

【问题讨论】:

  • 如果您已经编写了解决方案,请发布代码。
  • 对不起,我不认为发布解决方案会很好。我只需要我放置的那些测试用例的输出,以便我评估我的算法
  • 为了澄清,如果您希望我们检查您的算法,我要求发布您的解决方案。我并不是建议有人在这里发布解决方案来为您解决问题。
  • 但是我会为其他人破坏它。实际上,我问的是“给定上述输入时你的程序输出什么”,而不是要检查我的代码。没关系,我终于解决了。感谢您的帮助:) 如果有人偶然发现这个问题,这里是我要求的示例测试用例的输出:N=1, ans=1; N=2,ans=3; N=3,ans=9; N=4,ans=21; N=5,ans=63; N=6,ans=135; N=7,ans=405; N=8,ans=675; N=9,ans=1215; N=10, ans=2295;
  • 你错过了 (10,15) 和 (15,10)。

标签: c++ math testcase equations


【解决方案1】:

我的解决方案被面试街接受了。 首先,我的解决方案没有被接受,但是在看到@Reinardus Surya Pradhit 的帖子后,我意识到,如果 pair (x, y) 将被计算两次,所以我稍微改变了一下并取得了成功 我不会在这里发布我的解决方案,但我可以告诉你所有变量的测试用例 N = 3 -> N = 10 结果在这里

N=3: 9
N=4: 21
N=5: 63 
N=6: 135
N=7: 405
N=8: 675
N=9: 1215
N=10: 2295

我的提示是:尝试表达 N!来自p1^q1 * p2^q2 * ... * pn^qn的素数

【讨论】:

  • N=131399 的输出是什么,我得到 598995,但它给出了错误。
【解决方案2】:

暂时不考虑N!的特殊形式,求解方程

1/k = 1/x + 1/y

x = k + d。那么

1/y = 1/k - 1/(k + d) = d/(k*(k+d))

从中确定解决方案数量的任务留给读者作为练习。

【讨论】:

  • 感谢您的回答先生。其实我已经有了自己的想法。先生,您能给我 N=1 ~ N=10 的输出吗?我需要他们找出我算法的缺陷。谢谢:)
  • 您发布的数字是正确的,您似乎找到了漏洞。恭喜。
【解决方案3】:

只处理整数以避免舍入错误很重要:首先将等式重新排列为:

N!(X+Y)=XY

我不知道从那里去哪里。

【讨论】:

    【解决方案4】:

    要得出最终结果,我们需要计算 (2*q1+1)*(2*q2+1)*(2*q3+1)... 但是我们将如何存储结果,假设 N=32327 会溢出结果。 如果我错了,请纠正我

    【讨论】:

    • 你是否计算了模1000007的结果?
    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多