BIU番号(または合計数)


10

それらを見つける方法

正の整数kを取ります。その除数を見つけます。各除数の明確な素因数を見つけます。これらすべての要素を合計します。この数(合計)がkの約数である場合合計がkを除算する場合)、この数kはBIU数です。

54
を取ってみましょうすべての除数 [1, 2, 3, 6, 9, 18, 27, 54]
を検索各除数の個別の素因数を検索
注:1個別の素因数として取得する場合1

1  -> 1  
2  -> 2  
3  -> 3  
6  -> 2,3  
9  -> 3  
18 -> 2,3  
27 -> 3  
54 -> 2,3 

今、私たちは和取るすべてのこれらの素因数
1+2+3+2+3+3+2+3+3+2+3=27
27除算54(葉なし余り)
だから、54 あるBIU番号を

以下のためのもう一つの(速い)例k=55
:除数 [1,5,11,55]
の異なる素因数の合計は: 1+5+11+5+11=33
33はありませんなぜだ55の除数、55あるNOT BIU番号

BIU番号

それらの最初の20は次のとおりです。

1,21,54,290,735,1428,1485,1652,2262,2376,2580,2838,2862,3003,3875,4221,4745、5525,6750,7050 ...

しかし、このリストは続き、あなたによって発見されるのを待っている多くのBIU番号があります!

チャレンジ

整数所与n>0として、入力出力n番目BIU番号

テストケース

入力->出力

1->1  
2->21   
42->23595  
100->118300    
200->415777    
300->800175    

これはゴルフです。


2
しかし1、素数ではない...
スティーブン

3
@Stephenそれが私が「1の場合、我々は明確な素因数1とする」と言った理由です。これは私のチャレンジであり、これはこのチャレンジのルールの1つです。1が素数であるとは言いませんでした。

4
なぜ「BIU」と呼ばれるのですか?
Misha Lavrov 2017

4
よく

5
反対投票者、恥ずかしがらないで。他の人とあなたの考えを共有してください。

回答:


5

ゼリー16 15バイト

ÆDÆfQ€SS‘ḍ
1Ç#Ṫ

オンラインでお試しください!

ビルトイン用のWoohoo(ただし、不思議なことに私から隠れることがあります。@ HyperNeutrinoのおかげで-1バイトです

使い方

ÆDÆfQ€SS‘ḍ - define helper function: is input a BIU number?
ÆD             - divisors
  Æf           - list of prime factors
    Q€         - now distinct prime factors
      SS       - sum, then sum again ('' counts as 0)
        ‘      - add one (to account for '')
         ḍ     - does this divide the input?

1Ç#Ṫ - main link, input n
  #     - starting at 
1          - 1
        - get the first n integers which meet:
 Ç         - helper link
   Ṫ    - tail

-1バイトのÆfQ€代わりに使用ÆFḢ€€
HyperNeutrino

2
but they mysteriously hide from me sometime「ゼリーはアトムを隠すゲームであり、プログラマーはシークする」
〜i

で1バイト節約できると思いますÆDÆFSSḢ‘ḍ
Arnauld 2017



3

Husk、13バイト

!fṠ¦ö→ΣṁoupḊN

オンラインでお試しください!

外植

  Ṡ¦ö→ΣṁoupḊ    Predicate: returns 1 if BIU, else 0.
           Ḋ    List of divisors
       ṁ        Map and then concatenate
        oup     unique prime factors
      Σ         Sum
    ö→          Add one
  Ṡ¦            Is the argument divisible by this result
 f          N   Filter the natural numbers by that predicate
!               Index

2

実際には、16バイト

u⌠;÷♂y♂iΣu@%Y⌡╓N

オンラインでお試しください!

説明:

u⌠;÷♂y♂iΣu@%Y⌡╓N
u⌠;÷♂y♂iΣu@%Y⌡╓   first n+1 numbers x starting with x=0 where
   ÷                divisors
    ♂y              prime factors of divisors
      ♂iΣu          sum of prime factors of divisors, plus 1
  ;       @%        x mod sum
            Y       is 0
               N  last number in list

2

Pyth、22バイト

e.f|qZ1!%Zhssm{Pd*M{yP

ここでお試しください!

これは私の初めてのPythソリューションです。チャットで非常に親切なユーザーからの推奨のおかげでそれを学び始めました:-)...解決するのに約1時間かかりました。

説明

ef | qZ1!%Zhssm {Pd * M {yP-プログラム全体。Q =入力。

 .f-変数Zを使用した、真の結果を持つ最初のQ整数。
     qZ1-Zは1ですか?
   | -論理OR。
                   {yP-素因数、パワーセット、重複排除。
                 * M-それぞれの製品を取得します。このchunckと^は約数です。
              m} Pd-それぞれに固有の素因数を取得します。
           ss-平坦化して合計します。
          h-増分(1、bahを処理するため)
       %Z-現在の整数を上記の合計で剰余します。
      !-論理否定。0-> True、> 0-> False。
e-最後の要素。

1

Haskell、115バイト

ここにリストされているすべての理解は、おそらくゴルフで成り立つ可能性がありますが、方法はわかりません。ゴルフの提案を歓迎します!オンラインでお試しください!

x!y=rem x y<1
b n=[a|a<-[1..],a!(1+sum[sum[z|z<-[2..m],m!z,and[not$z!x|x<-[2..z-1]]]|m<-[x|x<-[2..a],a!x]])]!!(n-1)

アンゴルフ

この答えは、実際には3つの関数を組み合わせたものです。

divisors a = [x | x <- [2..a], rem a x == 0]
sumPrimeDivs m = sum [z | z <- [2..m], rem m z == 0, and [rem z x /= 0 | x <- [2..z-1]]]
biu n = [a | a <- [1..], rem a (1 + sum [sumPrimeDivs m | m <- divisors a]) == 0] !! (n-1)

0

Japt22 21バイト

@¥(J±XvXâ ®k âÃxx Ä}a

試して

私はのように感じるg方法が短い解決につながるはずの機能が、私はそれがどのように動作するかを把握することはできません!


説明

integerの暗黙的な入力U

@                  }a

から始め0て、次の関数を通過したときにtrueを返す最初の数値をX現在の数値として返します。

Xâ ®   Ã

の約数(â)を取得し、Xそれぞれを関数に渡します。

k â

k現在の要素の因子()を取得し、重複(â)を削除します。

xx

最初に各サブ配列に同じことを行った後、追加によって配列を減らします。

Ä

1結果に追加します。

Xv

Xがその数で割り切れるかどうかをテストします。

そのテストの結果によってJ(最初は-1)増分します。

¥

と等しいかどうかを確認しUます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.