Java 在一段时间内得到一个数字

Java 在一段时间内得到一个数字,java,math,Java,Math,我想根据以下伪代码从两个变量中得到一个介于5和250之间的数字: arg[1-19] * something = [5 - 250] arg将包含区间[1-19]中的值(整数)某物可以是任何整数 问题是,我使用arg和something的不同组合获得相同的结果: arg: 1, something: 10 => result 10 arg: 2, something: 5 => result 10 如何确保任何不同的arg和某物对的结果不同 有一个数学函数或java函数可以做到

我想根据以下伪代码从两个变量中得到一个介于5和250之间的数字:

arg[1-19] * something = [5 - 250]
arg
将包含区间
[1-19]
中的值(整数)<代码>某物可以是任何整数

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

arg: 1, something: 10 => result 10
arg: 2, something:  5 => result 10
如何确保任何不同的
arg
某物对的结果不同


有一个数学函数或java函数可以做到这一点吗?

如果
某个
可以接受超过
12个
值,这是不可能的,因为您的输入空间的大小至少为
19*13=247
,而您的输出空间的大小为
245


如果
something
的值小于
12
值,您可以简单地执行:
19*$something+arg+4
假设您将
something
的值映射到间隔
[0,n]

如果
某物
的值大于
12
值,这是不可能的,因为输入空间的大小至少为
19*13=247
,而输出空间的大小为
245


如果
something
的值小于
12
值,您可以简单地执行:
19*$something+arg+4
假设您将
something
的值映射到间隔
[0,n]
我认为您在编程方面没有问题。相反,我认为你应该后退一步,试着从数学的角度去理解你的问题。考虑方程

(1) a * b = C
对于任何(任意选择的)C,其中
a
b
C
为整数

除非
a
b
都是素数,否则至少会有一对其他
a,b
也满足等式。如果你想一想,证明是非常简单的:

假设
a
不是素数(对于
b
不是素数的证明是一样的)。然后必须至少有两个整数
p
a'
p
根据定义不是一),以便

现在定义一下

(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)
将给出不同的结果,则必须同时具有
a,b
素数

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

例如,如果我们知道您的
某物
总是小于10(即
0,1,…,9
),您可以执行
(arg*10)+某物
(这只是一个说明原理的示例;考虑到您提到的
arg
的限制,它将给出介于
10
199
之间的值,因此它实际上不是您问题的解决方案;我选择该数字是因为我们的十进制系统基本上是这样工作的:-)因此你已经知道了)


最后,它是如此的琐碎以至于我想不起来,请记住,
a*b=b*a
(乘法至少对我们的整个实数和无理数是可交换的,还有一些我不敢提及的)。应用于您的问题:
arg*something=something*arg
。当然,即使
arg
something
都是素数,这仍然是正确的。如果您交换
arg
something
的值,则不可避免地会得到相同的结果。无论您想实现什么目标,这可能是可以接受的,也可能是不可以接受的。

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

(1) a * b = C
对于任何(任意选择的)C,其中
a
b
C
为整数

除非
a
b
都是素数,否则至少会有一对其他
a,b
也满足等式。如果你想一想,证明是非常简单的:

假设
a
不是素数(对于
b
不是素数的证明是一样的)。然后必须至少有两个整数
p
a'
p
根据定义不是一),以便

现在定义一下

(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)
将给出不同的结果,则必须同时具有
a,b
素数

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

例如,如果我们知道您的
某物
总是小于10(即
0,1,…,9
),您可以执行
(arg*10)+某物
(这只是一个说明原理的示例;考虑到您提到的
arg
的限制,它将给出介于
10
199
之间的值,因此它实际上不是您问题的解决方案;我选择该数字是因为我们的十进制系统基本上是这样工作的:-)因此你已经知道了)

最后,它是如此的微不足道以至于我可能不会想到它,请记住,
a*b=b*a
(乘法至少对我们的整体来说是可交换的,真实的和非理性的