找出一个生成所有整数mod q的数字


9

考虑以模为模的整数q,其中q素数为质数,生成器为任何整数,1 < x < q从而x^1, x^2, ..., x^(q-1)涵盖和q-1之间的所有整数。例如,考虑以7为模的整数(我们写为)。然后覆盖所有值,并根据需要覆盖所有整数。1q-1Z_73, 3^2 mod 7 = 2, 3^3 = 27 mod 7 = 6, 3^4 = 81 mod 7 = 4, 3^5 = 243 mod 7 = 5, 3^6 = 729 mod 7 = 13, 2, 6, 4, 5, 11..6

任务是编写接受输入n并输出的生成器的代码Z_n。当然,您不能使用为您执行此操作的任何内置函数或库。

对代码性能的唯一限制是,您必须已通过测试完成了代码n = 4257452468389

请注意,这2^n 意味着2的功效n。那^代表指数。


嗯... 1 < x < q让挑战变得容易得多。
暴民埃里克(Erik the Outgolfer)'17

@EriktheOutgolfer我不确定我知道你的意思吗?这些只是所有的不同的整数不在0或1

我的意思是,它比许多人想像的要容易...或在PPCG上处于不活动状态的那一刻。
暴民埃里克(Erik the Outgolfer)'17

3
但是我认为不需要人们对其进行大量测试才能完成……基本上,tio只会带来内存错误。
大公埃里克(Erik the Outgolfer)'17年

@Lembik在任何情况下,一定数量的发电机都没有吗?一些测试用例会很好。
Xcoder先生17年

Answers:


13

Pyth,16 15字节

f-1m.^T/tQdQPtQ

测试套件

如果p是输入,我们知道g ^(p-1)= 1 mod p,所以我们只需要检查g ^ a!= 1 mod p是否有更小的a。但是a必须是p-1的因数,并且具有该属性的a的任何倍数也将具有该属性,因此我们只需要检查g ^((p-1)/ q)!对于p-1的所有素数因子q = 1 mod p。因此,我们以升序检查所有整数g,直到找到一个有效的整数。

说明:

f-1m.^T/tQdQPtQ
f                  Return the first value T such that the following is truthy:
            PtQ    Take the prime factorization of the input - 1.
   m               Map those prime factors to
       /tQd        Take the input - 1 divided by the factor
    .^T    Q       Raise T to that exponent mod input,
                   performed as modular exponentiation, for performance.
 -1                Check that 1 is not found among the results.

太棒了!

您的代码是否执行分解?

@Lembik它(PtQ部分)。
暴民埃里克(Erik the Outgolfer)'17年


-3
%MATLAB CODE
%Program to generate Z_n for an integer n
n = input('Enter a number to find modulo')
q = input ('Enter a prime number greater than the number you wished to find modulo')
if n>=q 
   fprintf('Error')
   exit(1)
end
for R=1:q-1
    fprintf(rem(n.^R, q))
    fprintf('\n')
end

1
这不是解决正确的问题。例如,您的代码应采用一种输入并给出一种输出。

1
另外,此代码根本不适用。通用代码必须尽可能短,因此可以删除输入的文本和等号周围的空格。
“ SparklePony同志” 17年

3
@ComradeSparklePony我认为它不能解决正确问题的第一个问题应该首先解决:)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.