【发布时间】:2017-01-30 19:25:49
【问题描述】:
我正在用 c# 编写程序,它需要找到 X,其中 k2 和 s 的最大公约数是 1,x 小于 s 并且 k1,k2,y,s 是常数。现在,我通过遍历 X 的每个值并检查它们是否正确来做到这一点,但是当我有 40000+ 个值时,这是非常耗时的。或者,如果对您来说更容易,您可以尝试从 y=x mod(s) 中指定 X。
我现在正在使用代码来解决它:
if (GCD(k2, k) == 1)
{
for (int i = 0; i < k; i++)
{
n1 = 0;
n = 0;
while(n < 1)
{
if(i == (k1 + k2 * n1) % k){
s1[n1] = s[i];
n++;
}
n1++;
}
}
}
提前致谢。
附:如果有什么不清楚的地方,请告诉我,我很难解释这一切:P
【问题讨论】:
-
您想找出两个数能除的最大数吗?例如 4 代表 12 和 20?
-
你能举一个数字例子和你知道的解决方案吗? y、k1、k2、s、x的典型值是多少?
-
提示:你知道什么是乘法逆吗?
-
示例:17395=(100+43*X)mod(633424),此处为 X=17395, 24302=(100+43*X)mod(40000),此处为 X=5214不知道乘法逆是什么,能帮我解决我的问题吗?:P