gpt4 book ai didi

java - 获取一个区间内的数字

转载 作者:行者123 更新时间:2023-12-01 07:47:07 53 4
gpt4 key购买 nike

我想根据以下伪代码从两个变量中获取 5 到 250 之间的数字:

arg[1-19] * something = [5 - 250]

arg将包含区间 [1 - 19] 中的值(整数) ; something可以是任何整数。

问题是我使用 arg 的不同组合获得相同的结果和something :

arg: 1, something: 10 => result 10
arg: 2, something: 5 => result 10

如何确保任何不同对 arg 的结果都不同和something

有没有数学函数或者java中的函数可以做到这一点?

最佳答案

我认为你在编程方面没有问题。相反,我认为你应该退后一步,尝试从数学层面理解你的问题。考虑方程

(1) a * b = C

对于任意(任意选择的)C,a , bC是整数。

除非 ab 都是素数,则至少会有一对其他 a, b也满足方程。如果您想一下,证明非常简单:

假设a不是素数(证明 b 不是素数是相同的)。那么至少必须有两个整数pa' ( p 根据定义不是一个)因此

(2) a = p * a'

现在定义

(3) b' = p * b

使用方程(2)和(3),您可以像这样重新排列方程(1):

(4) C = a * b = (p * a') * b = a' * (p * b) = a' * b'

q.e.d

在这里,从p != 1开始(根据定义 - 见上文),a != a'b != b' .

这意味着您必须同时具备两个因素 a, b prime 如果你想保证每对不同的 (a, b)会给出不同的结果 a * b .

您没有告诉我们您实际想要实现的目标,但可能有比两个整数相乘更好的解决方案。

例如,如果我们知道您的 something总是小于十(即 0, 1, ..., 9 ),你可以这样做 (arg * 10) + something (这只是一个展示原理的例子;考虑到您提到的 10 的限制,它会给出 199arg 之间的值,所以它实际上并不能解决您的问题;我选择了这些数字因为我们的十进制系统基本上就是这样工作的:-),因此你已经知道了)。

最后,请记住 a * b = b * a ,这太微不足道了,您可能不会想到它。 (乘法至少对于我们的整数、实数和无理数以及其他一些我不敢提及的数是可交换的)。应用于您的问题:arg * something = something * arg 。当然,即使 arg 仍然如此。和something都是素数。如果交换arg的值,不可避免地会得到相同的结果。和something 。对于您想要实现的目标来说,这可能是可接受的,也可能是 Not Acceptable 。

关于java - 获取一个区间内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49574121/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com