হিলবার্ট প্রাইমস গল্ফ


18

হিলবার্ট সংখ্যার ফর্মের ধনাত্মক পূর্ণসংখ্যা হিসাবে সংজ্ঞায়িত করা হয় 4n + 1জন্য n >= 0। প্রথম কয়েকটি হিলবার্ট সংখ্যা হ'ল:

1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97

হিলবার্ট নম্বর সিকোয়েন্সটি OEIS সিকোয়েন্স A016813 দ্বারা দেওয়া হয়েছে ।

একজন সংশ্লিষ্ট সংখ্যা ক্রম, হিলবার্ট মৌলিক, হিলবার্ট নম্বর সংজ্ঞায়িত করা হয় H > 1যে কোনো হিলবার্ট সংখ্যা দ্বারা বিভাজ্য নয় kযেমন যে 1 < k < H। প্রথম কয়েকটি হিলবার্ট প্রাইম হলেন:

5, 9, 13, 17, 21, 29, 33, 37, 41, 49, 53, 57, 61, 69, 73, 77, 89, 93, 97, 101, 109, 113, 121, 129, 133, 137, 141, 149, 157, 161, 173, 177, 181, 193, 197

স্বাভাবিকভাবেই, ওইআইএসেরও এই ক্রম রয়েছে

একটি পূর্ণসংখ্যা দেওয়া nযেমন যে 0 <= n <= 2^16ইনপুট, আউটপুট nতম হিলবার্ট প্রধানমন্ত্রী।

এটি , সুতরাং মানক বিধিগুলি প্রয়োগ হয় এবং বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী হয়।

লিডারবোর্ড

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে লিডারবোর্ড তৈরি করে) ক) ভাষা প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


আমি মনে করি আপনি "তুলনামূলকভাবে প্রাইম উইথ" এর পরিবর্তে "দ্বারা বিভাজ্য নন" mean 21 এবং 9 ভাগ 3 এর একটি সাধারণ ফ্যাক্টর ভাগ করে
xnor

উত্তর:


3

পাইথ, 21 বাইট

Lh*4bye.fqZf!%yZyT1hQ

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

Lh*4bye.fqZf!%yZyT1Q    implicit: Q = input number
L                       define a function y(b), which returns
 h*4b                      4*b + 1
                        this converts a index to its Hilbert number
       .f          hQ   find the first (Q+1) numbers Z >= 1, which satisfy:
           f      1        find the first number T >= 1, which satisfies:
            !%yZyT            y(Z) mod y(T) == 0
         qZ                test if the result is equal to Z 

                        this gives a list of indices of the first Q Hilbert Primes
      e                 take the last index
     y                  apply y and print

11

হাস্কেল, 46 বাইট

(foldr(\a b->a:[x|x<-b,mod x a>0])[][5,9..]!!)

একটি বেনামে ফাংশন।

মূলটি হ'ল foldr(\a b->a:[x|x<-b,mod x a>0])[][5,9..], যা পাটিগণিতের অগ্রগতির মাধ্যমে পুনরাবৃত্তি 5,9,13,...করে, তালিকাটির প্রত্যেকটির গুণকে তালিকা থেকে ডানদিকে সরান। এটি হিলবার্ট প্রাইমগুলির অসীম তালিকা তৈরি করে। তারপরে, থিম উপাদানটি !!নেয় n

আমি (\a b->a:[x|x<-b,mod x a>0])পয়েন্টফ্রি তৈরির চেষ্টা করেছি কিন্তু ছোট্ট উপায় খুঁজে পাইনি।


3
বাঁক foldr: অন্য তালিকা ধী দুই byes সংরক্ষণ([x|x<-[5,9..],all((>0).mod x)[5,9..x-1]]!!)
nimi

@ নিমিমি সুন্দর সমাধান আপনার এটি পোস্ট করা উচিত, এটি একটি ভিন্ন পদ্ধতি। আমি দু: খিত যদিও এটি সংক্ষিপ্ত কারণ এটি সংজ্ঞায় আরও সরাসরি এবং তালিকার পুনরাবৃত্তি কম সুন্দর।
xnor

4

সিজেম, 36 33 32 23 বাইট

5ri{_L+:L;{4+_Lf%0&}g}*

এটি অনলাইনে চেষ্টা করুন

সর্বশেষতম সংস্করণটি আসলে আমার চেয়ে অনেক বেশি @ মার্টিনব্যাটনার। তার প্রস্তাবিত সমাধানের মূল ধারণাটি হ'ল শর্ত পূরণ করে এমন এন-থের মান খুঁজে পেতে দুটি নেস্টেড লুপ ব্যবহার করা। আমি ভেবেছিলাম যে আমি আমার আসল সমাধানটিতে কেবল একটি একক লুপ ব্যবহার করে চালাক হয়ে উঠছি তবে এটি প্রমাণিত হয়েছে যে যুক্ত লজিকের জন্য দ্বিতীয় লুপটি ব্যবহার না করে আমি সংরক্ষণের চেয়ে বেশি খরচ হয়েছে cost

ব্যাখ্যা

5       Push first Hilbert prime.
ri      Get input n and convert to integer.
{       Loop n times.
  _       Push a copy of current Hilbert prime.
  L       Push list of Hilbert primes found so far (L defaults to empty list).
  +       Prepend current Hilbert prime to list.
  :L      Store new list of Hilbert primes in variable L.
  ;       Pop list off stack.
  {       Start while loop for finding next Hilbert prime.
    4+      Add 4 to get next Hilbert number.
    _       Copy candidate Hilbert number.
    L       Push list of Hilbert primes found so far.
    f%      Element wise modulo of Hilbert number with smaller Hilbert primes.
    0&      Check for 0 in list of modulo values.
  }g      End while loop.
}*      End loop n times.

2

মিনকোলাং 0.14 , 46 37 32 বাইট

আমি বুঝতে পারি নি যে গোসব সম্পূর্ণ অপ্রয়োজনীয় ...> _>

n$z(xxi4*5+d(4-$d%)1=,z+$ziz-)N.

এটি এখানে চেষ্টা করুন এবং সমস্ত পরীক্ষার কেসগুলি এখানে পরীক্ষা করুন

ব্যাখ্যা

n$z                                 Take number from input and store it in the register
   (                                Open while loop
    xx                              Dump the stack
      i4*5+                         Loop counter times 4 plus 5 (Hilbert number)
           d                        Duplicate
            (                       Open while loop
             4-                     Subtract 4
               $d                   Duplicate stack
                 %                  Modulo
                  )                 Exit while loop when top of stack is 0
                   1=,              0 if 1, 1 otherwise
                      z             Push register value
                       +            Add
                        $z          Pop and store in register
                          iz-       Subtract z from loop counter
                             )      Exit while loop when top of stack is 0
                              N.    Output as number and stop.

নিবন্ধটি লক্ষ্য সূচক সঞ্চয় করতে ব্যবহৃত হয়। বাইরের সময় লুপ প্রতিটি হিলবার্ট সংখ্যা গণনা করে এবং কিছু বুককিপিং করে। অভ্যন্তরীণ সময় লুপ আদিমতার জন্য প্রতিটি হিলবার্ট নম্বর পরীক্ষা করে। যদি হিলবার্ট সংখ্যা হিলবার্ট প্রাইম না হয় তবে লক্ষ্যটি বাড়ানো হয় যাতে বাইরের সময় লুপটিকে আরও একবার পুনরায় (কমপক্ষে) পুনরুক্তি করতে হয়, কার্যকরভাবে হিলবার্ট কম্পোজিটগুলি এড়িয়ে যায়।


2

গণিত, 65 বাইট

Select[4Range[4^9]+1,Divisors[#][[2;;-2]]~Mod~4~FreeQ~1&][[#+1]]&

সম্পূর্ণ তালিকা তৈরি করে এবং এটি থেকে উপাদানটি নির্বাচন করে।


1

রুবি, 60 বাইট

h=->i{n=[];x=5;n.any?{|r|x%r<1}?x+=4: n<<x until e=n[i-1];e}

কেবল হিলবার্ট প্রধান বিষয়গুলি পরীক্ষা করে।


0

জাভাস্ক্রিপ্ট (ES6), 73 বাইট

n=>{for(i=0,t=2;i<=n;)i+=!/^(.(....)+)\1+$/.test(Array(t+=4));return t-1}

আমরা নবম হিলবার্ট প্রাইম পৌঁছানো অবধি এক এক করে হিলবার্ট নম্বর পরীক্ষা করে দেখুন। হিলবার্ট সংখ্যা দ্বারা বিভাজ্যতা রেজেক্স দ্বারা পরিচালিত হয়।


0

মতলব, 74 83 বাইট

function t=H(n)
x=5;t=x;while nnz(x)<n
t=t+4;x=[x t(1:+all(mod(t,x)))];end

9 বাইট অপসারণ করার জন্য টম কার্পেন্টারকে ধন্যবাদ!

উদাহরণ ব্যবহার:

>> H(20)
ans =
   101

@ টমকার্পেন্টার ধন্যবাদ! এখন এই উত্তরটি আমার চেয়ে আপনার বেশি :-)
লুইস মেন্ডো

আপনাকে স্বাগতম :). এটি এখনও আপনার যুক্তি, আমি পথে চালিত কয়েকটি কৌশল প্রয়োগ করেছি।
টম কার্পেন্টার

0

জুলিয়া, 73 বাইট

n->(a=[x=5];while length(a)<n;x+=4;all(k->mod(x,k)>0,a)&&push!(a,x)end;x)

11 বাইট সংরক্ষণের জন্য অ্যালেক্স এ-কে ধন্যবাদ! এটি মতলব এবং রুবি উত্তরগুলির মতো একই অ্যালগরিদম ব্যবহার করে। জুলিয়া অ্যারেগুলি এক-সূচকযুক্ত হওয়ায় এটি শুরু হয় f(1) == 5

অলস প্যাকেজটি ব্যবহার করে আমার প্রথম প্রচেষ্টাটি 106 বাইট । আপনি যদি REPL এ চালানোর পরিকল্পনা করেন তবে অসীম আউটপুট দমন করতে লাইনের শেষ প্রান্তে সেমিকোলন যুক্ত করার বিষয়টি নিশ্চিত করুন। এবং Pkg.Add("Lazy")যদি আপনি ইতিমধ্যে এটি ইনস্টল না করে থাকেন তবে কল করুন ।

using Lazy
r=range
h=r(1,Inf,4)
p=@>>r() filter(n->n!=1&&all(map(x->mod(h[n],h[x])<1,2:n-1)))
f=n->h[p[n]]

1
73 বাইট:n->(a=[x=5];while length(a)<n x+=4;all(k->mod(x,k)>0,a)&&push!(a,x)end;x)
অ্যালেক্স এ।

1
আপনি endofপরিবর্তে lengthএবং x%kপরিবর্তে ব্যবহার করে আরও কিছু সঞ্চয় করতে পারেন mod(x,k)
অ্যালেক্স এ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.