かなり滑らかな動き


18

算術では、n平滑数(nは任意の素数)は、nより大きい素因数を持たない正の整数として数学的に定義されます。たとえば、42はすべての素因数が7以下であるため7平滑ですが、44は素因数として11もあるため7平滑ではありません。

非常に滑らかな数値を、それ自体の平方根より大きい素因数のない数値として定義します。したがって、非常に滑らかな数値のリストは次のように定式化できます。

  • (編集済み!) 1は、素因数がまったくないため、非常に滑らかな数値です。(この質問の元のバージョンでは、1がリストから誤って除外されていたため、出力から除外した場合、間違ってマークされることはありません。)
  • 4(= 2 2)と8の間では、非常に滑らかな数値は2滑らかで、2が唯一の素因数であるということです。
  • 9(= 3 2)と24の間では、非常に滑らかな数値は3滑らかで、素因数分解で2と3を持つことができます。
  • 25(= 5 2)と48の間では、非常に滑らかな数値は5滑らかで、素因数分解で2、3、および5を持つことができます。
  • など、次の素数の二乗に到達するたびに基準をアップグレードします。

非常に滑らかな数値のリストは固定されており、次のように始まります:1、4、8、9、12、16、18、24、25、...

あなたの課題は、10,000(= 100 2)までのすべての非常に滑らかな数値を出力するコードを書くことです。リスト内の各番号と次の番号の間には、少なくとも1つのセパレーター(スペース、コンマ、改行などは関係ありません)が必要ですが、どの文字が使用されるかはまったく関係ありません。

いつものように、最低のバイト数が勝ちます-明らかに、リストを出力するだけではここではあまり有益ではありません。幸運を!


9
1があまり滑らかではないのはなぜですか?
デニス

リストを逆順に出力できますか?
リーキー修道女

5
OEIS A048098(追加を含む1
リーキー修道女

1
@Mego「4未満の非常に滑らかな数値はありません。」かなり明確です。必ずしも明白ではありませんが、間違いなく明確です。
viraptor

1
@viraptor 1がスムーズでないと述べられていなかったためではなく、定義と除外ステートメントが互いに矛盾しているため、明確ではないとして投票されます。
リーキー修道女

回答:


1

実際には、11バイト

4╤R`;yM²≤`░

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

1は含まれません。

説明:

4╤R`;yM²≤`░
4╤R          range(10**4)
   `;yM²≤`░  filter: take values where
    ;yM²       the square of the largest prime factor
        ≤      is less than or equal to the value

7

ゼリー、12 バイト

Æf>½S
³²ḊÇÐḟ

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

使い方

³²ḊÇÐḟ  Main link. No arguments.

³       Yield 100.
 ²      Square it to yield 10,000.
  Ḋ     Dequeue; yield [2, ..., 10,000].
   ÇÐḟ  Filter-false; keep elements for which the helper link returns 0.

Æf>½S   Helper link. Argument: n

Æf      Compute the prime factorization of n.
  >½    Compare the prime factors with the square root of n.
    S   Sum; add the resulting Booleans.

7

Brachylog21 19バイト

Fatalizeのおかげで、もう1バイトのインスピレーションが得られました。

100^:4reP$ph^<=P@w\

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

ここでは約6秒かかります。

100^:4reP$ph^<=P@w\
100                      100
   ^                     squared
    :4                   [10000,4]
      r                  [4,10000]
       eP                P is an integer in that interval (choice point),
        P$ph^<=P         P, prime factorized (from biggest to smallest),
                         take the first element, squared, is less than
                         or equal to P
               P@w       Write P with a newline,
                  \      Backtrack to the last choice point and make
                         a different choice until there is no more
                         choice and the program halts.

以前の21バイトソリューション

100^:4reP'($pe^>P)@w\

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

ここでは約6秒かかります。

100^:4reP'($pe^>P)@w\
100                      100
   ^                     squared
    :4                   [10000,4]
      r                  [4,10000]
       eP                P is an integer in that interval (choice point),
        P'(      )       The following about P cannot be proved:
           $pe               one of its prime factor
              ^              squared
               >P            is greater than P
                  @w     Write P with a newline,
                    \    Backtrack to the last choice point and make
                         a different choice until there is no more
                         choice and the program halts.

100^:4reP$pot^<=P@w\エレガントではありませんが、1バイト短くなります。
致命的

@Fatalizeありがとう、私は別のバイトをオフにゴルフ
リーキー修道女

4

Haskell、53バイト

r=[1..10^4]
[n|n<-r,product[x|x<-r,x*x<=n]^n`mod`n<1]

今ゴルフをする時間はありませんが、nかなりスムーズかどうかをテストする方法を説明したいと思います:1to の数値を乗算sqrt(n)(つまり階乗を計算)し、製品を高出力に上げ、結果がどうかを確認しますはの倍数ですn

出力しないr=[2..10^4]場合に変更し1ます。


ゴルファーというわけではありませんが、キューブで十分だと確信しています(8それが必要です)。
ニール

2

Pyth16 15バイト

ジャクベのおかげで1バイト。

tf!f>*YYTPTS^T4

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

tf!f>*YYTPTS^T4
             T   10
            ^T4  10000
           S^T4  [1,2,3,...,10000]
 f               filter for elements as T for
                 which the following is truthy: 
         PT          prime factorization of T
   f                 filter for factor as Y:
     *YY                 Y*Y
    >   T                greater than T ?
  !                  logical negation
t                remove the first one (1)

確かにPythには二乗関数がありますか?だから*dd 、その関数に置き換えることができますか?
コナーオブライエン

@ ConorO'Brienいいえ、Pythには二乗関数はありません。
リーキー修道女

それは一種の見落としのようです
コナー・オブライエン

2

05AB1E、 16 14 13バイト

4°L¦vyf¤yt›_—

説明

4°L¦v             # for each y in range 2..10000
      yf¤         # largest prime factor of y
         yt       # square root of y
           ›_     # less than or equal
             —    # if true then print y with newline

オンラインで試す


10000の短縮です。-
アドナン

@Adnanありがとう!そのことを忘れました。
エミグナ

2

Matlab、58 57 56 52 48バイト

for k=1:1e4
if factor(k).^2<=k
disp‌​(k)
end
end

数値ごとに、平方されたすべての因子が数値自体より大きくないかどうかをチェックします。はいの場合、その番号を表示します。

このアプローチをゴルフしてくれた@Luis Mendoに感謝します


別のアプローチ(50バイト):

n=1:10^4;for k=n
z(k)=max(factor(k))^2>k;end
n(~z)

各数値について、その最大素因数の2乗が数値自体よりも小さいかどうかを計算します。次に、インデックス作成に使用します。


1
あなたの前のアプローチを短くすることができます:for k=4:1e4,if factor(k).^2<=k,disp(k);end;end
ルイスMendo

1

SQF252 227 220

標準スクリプト形式:

#define Q(A,B) for #A from 2 to B do{
Q(i,10000)if([i]call{params["j"];u=sqrt j;a=true;Q(k,u)a=a and((j%k!=0)or(j/k<u)or!([j/k]call{params["x"];q=true;Q(z,sqrt x)q=q and(x%z!=0)};q}))};a})then{systemChat format["%1",i]}}

次を呼び出す場合、コンパイルチェーンにプリプロセッサを含めます。

  • execVM "FILENAME.sqf"
  • call compile preprocessFile "FILENAME.sqf"

これにより、SQFがstdoutに最も近いものであるシステムチャットログに書き込みます。



1

Pyke、13 12 11バイト

T4^S#DP#X<!

ここで試してみてください!

(リンクは10 ^ 4タイムアウトになるため、最大10 ^ 3になります)

T4^S        -  one_range(10^4)
    #DP#X<! - filter_true(V, ^): (as i)
      P     -   factors(i)
       #X<! -  filter_true(V, ^):
        X   -   ^ ** 2
         <! -    not (i < ^)



0

R、97バイト

b=F;for(j in 1:1e4){for(i in which(!j%%1:j)[-1])if(which(!i%%1:i)[2]==i)b=i<=j^0.5;if(b)print(j)}

食べない

b <- F                               #Initializes
for (j in 1:1e4){                    #Loop across integers 1..10^4
    a <- which(!j%%1:j)[-1]          #Finds all factors
    for (i in a)                     #Loop across factors
         b <- which(!i%%1:i)[2]==i   #Tests primeness
         if(b) c <- i<=j^0.5         #If prime, tests smoothness
    if(c) print(j)                   #If biggest prime factor gives smooth
}                                    #result, Prints the number.

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