すべての整数mod qを生成する数を見つける


9

整数を法を検討qどこqジェネレータは任意の整数であり、素数である1 < x < qようにx^1, x^2, ..., x^(q-1)、すべてのカバーq-1の間の整数の1q-1。たとえば、7を法とする整数(これをと表記Z_7)について考えてみます。次に3, 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 = 1、すべての値を3, 2, 6, 4, 5, 1カバーし、1..6必要に応じてすべての整数をカバーします。

タスクは、入力nを受け取り、のジェネレータを出力するコードを記述することですZ_n。もちろん、これを行う組み込み関数やライブラリは使用できません。

コードのパフォーマンスに対する唯一の制限は、で完全にテストする必要があることですn = 4257452468389

はの能力を2^n 意味すること2に注意してくださいn。それは^指数を表します。


うーん... 1 < x < qチャレンジがずっと簡単になります。
Erik the Outgolfer 2017

@EriktheOutgolfer私はあなたが何を意味するのか分からないのですか?これらは、0でも1でもないすべての異なる整数です

つまり、PPCGについて、多くの人が考えているよりも簡単であるとか、あるいはおそらく非アクティブな瞬間があるということです。
Erik the Outgolfer 2017

3
しかし、私は人々にそれをテストして大量に完成させることを要求することは不必要だと思います...基本的にはtioは単なるメモリエラーでしょう。
Erik the Outgolfer 2017

@Lembik特定の数のジェネレータがない場合はありますか?いくつかのテストケースは良いでしょう。
Xcoder氏2017

回答:


13

Pyth、16 15バイト

f-1m.^T/tQdQPtQ

テストスイート

pが入力である場合、g ^(p-1)= 1 mod pであることがわかっているため、小さいaについてg ^ a!= 1 mod pであることを確認するだけです。しかし、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 2017


-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つの入力を取り、1つの出力を与える必要があります。

1
また、このコードはまったくゴルフされていません。ゴルフしたコードはできるだけ短くする必要があるため、等号などの入力テキストとスペースを削除できます。
同志SparklePony 2017

3
@ComradeSparklePony正しい問題を解決していない最初の問題に最初に取り組む必要があると思います:)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.