বর্গক্ষেত্রের বৃক্ষের রিংগুলি প্রাইমগুলি থেকে উত্পন্ন করা যায়?


33

স্পষ্টতই হ্যাঁ! তিনটি সহজ পদক্ষেপে।

ধাপ 1

আসুন ( এন ) প্রাইম-কাউন্টিং ফাংশন ( এন এর চেয়ে কম বা সমান প্রাইমের সংখ্যা) বোঝায় ।

ইন্টিজার সিকোয়েন্স গুলি ( এন ) নিম্নলিখিত হিসাবে সংজ্ঞায়িত করুন । প্রতিটি ধনাত্মক পূর্ণসংখ্যার জন্য এন ,

  • প্রাথমিককরণ t থেকে n
  • যতদিন টি তন্ন তন্ন প্রধানমন্ত্রী কিংবা 1, প্রতিস্থাপন টি দ্বারা ( T ) এবং বারবার।
  • পুনরাবৃত্তির সংখ্যা গুলি ( এন )।

পুনরাবৃত্তি প্রক্রিয়াটি শেষ হওয়ার গ্যারান্টিযুক্ত কারণ এফ ( এন ) < এন সমস্ত এন এর জন্য

উদাহরণস্বরূপ n = 25 বিবেচনা করুন । আমরা টি = 25 কে প্রাথমিককরণ করি Since যেহেতু এটি প্রাথমিক বা 1 নয়, তাই আমরা f (25) গণনা করি , যা 9 This এটি টি এর জন্য নতুন মান হয়ে যায় । এই একটি প্রধান কিংবা 1, তাই আমরা অবিরত নয়: (9) 4. আমরা আবার অবিরত: (4) 2. হয় যেহেতু এই একটি মৌলিক আমরা স্টপ এখানে। আমরা 3 টি পুনরাবৃত্তি করেছি (25 থেকে 9, তারপরে 4, তারপরে 2)। সুতরাং s (25) 3 হয়।

ক্রমটির প্রথম 40 টি শর্তাবলী নিম্নরূপ। অনুক্রমটি OEIS এ নেই।

0 0 0 1 0 1 0 2 2 2 0 1 0 2 2 2 0 1 0 3 3 3 0 3 3 3 3 3 0 3 0 1 1 1 1 1 0 2 2 2

ধাপ ২

একটি বিজোড় ধনাত্মক পূর্ণসংখ্যার এন দেওয়া হয়েছে , বর্গাকার বাহ্যিক সর্পিল গঠনের জন্য সীমাবদ্ধ সিকোয়েন্স s (1), s (2), ..., s ( N 2 ) ঘুর দিয়ে একটি N × N অ্যারে (ম্যাট্রিক্স) তৈরি করুন । উদাহরণস্বরূপ, প্রদত্ত এন = 5 সর্পিলটি

s(21)   s(22)   s(23)   s(24)   s(25)
s(20)   s(7)    s(8)    s(9)    s(10)
s(19)   s(6)    s(1)    s(2)    s(11)
s(18)   s(5)    s(4)    s(3)    s(12)
s(17)   s(16)   s(15)   s(14)   s(13)

বা, মানগুলি প্রতিস্থাপন,

 3       3       0       3       3
 3       0       2       2       2
 0       1       0       0       0
 1       0       1       0       1
 0       2       2       2       0

ধাপ 3

ধূসর রঙের মানচিত্র বা আপনার স্বাদের অন্য কোনও রঙের মানচিত্র সহ চিত্র হিসাবে এন × এন অ্যারে প্রতিনিধিত্ব করুন । মানচিত্রটি ধীরে ধীরে হওয়া উচিত, যাতে সংখ্যার ক্রমটি বর্ণগুলির কিছু দৃশ্যমান স্পষ্ট ক্রমের সাথে মিলে যায়। নীচের পরীক্ষার কেসগুলির কয়েকটি উদাহরণ রঙের মানচিত্র দেখায়।

চ্যালেঞ্জ

একটি বিজোড় ধনাত্মক পূর্ণসংখ্যা এন দেওয়া হয়েছে , উপরে বর্ণিত চিত্রটি তৈরি করুন।

বিধি

  • সর্পিল অবশ্যই বাহ্যিক হতে হবে, তবে ঘড়ির কাঁটার দিক থেকে বা ঘড়ির কাঁটার বিপরীতে হতে পারে এবং ডানদিকে চলতে শুরু করতে পারে (উপরের উদাহরণ হিসাবে যেমন) বাম, নীচে বা উপরে।

  • অনুভূমিক এবং উল্লম্ব অক্ষগুলির স্কেলগুলি একই হওয়া উচিত নয়। অক্ষের লেবেল, রঙবার এবং অনুরূপ উপাদানগুলি alচ্ছিক। যতক্ষণ সর্পিল স্পষ্টভাবে দেখা যায় ততক্ষণ চিত্রটি বৈধ।

  • চিত্রগুলি যে কোনও স্ট্যান্ডার্ড মাধ্যমে আউটপুট হতে পারে । বিশেষত, চিত্রটি পর্দায় প্রদর্শিত হতে পারে, বা কোনও গ্রাফিক্স ফাইল তৈরি হতে পারে, বা আরজিবি মানগুলির একটি অ্যারে আউটপুট হতে পারে। যদি কোনও ফাইল বা একটি অ্যারে আউটপুট করে থাকে তবে দয়া করে প্রদর্শিত হলে এটি কেমন লাগে তার একটি উদাহরণ পোস্ট করুন।

  • ইনপুট অর্থ এবং ফর্ম্যাটটি যথারীতি নমনীয় । একটি প্রোগ্রাম বা একটি ফাংশন সরবরাহ করা যেতে পারেস্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ

  • বাইটস মধ্যে সংক্ষিপ্ত কোড।

পরীক্ষার মামলা

নিম্নলিখিত চিত্রগুলি (সম্পূর্ণ রেজোলিউশনের জন্য ক্লিক করুন) এন এর কয়েকটি মানের সাথে মিলে যায় । উপরের উদাহরণে যেমন একটি ঘড়ি অনুসারে, ডানদিকের-প্রথম সর্পিল ব্যবহৃত হয়। চিত্রগুলি বেশ কয়েকটি বৈধ রঙের মানচিত্রের চিত্রও দেয়।

  • এন = 301: এখানে চিত্র বর্ণনা লিখুন

  • এন = 501: এখানে চিত্র বর্ণনা লিখুন

  • এন = 701: এখানে চিত্র বর্ণনা লিখুন


এর মানগুলির একটি অ্যারে যদি কোনও s(n)প্লটিং ফাংশন / প্যাকেজটিতে সংশোধন না করেই খাওয়ানো যায় (আমি মনে করি imshowম্যাটপ্লোটিলেব উদাহরণস্বরূপ এটি পরিচালনা করতে পারে) এটি কি একটি গ্রহণযোগ্য আউটপুট ফর্ম?
দ্বাইলান

@ অল্লানান শিওর, যতক্ষণ না এটি চিত্রটি পর্দায় প্লট করে বা কোনও ফাইল তৈরি করে তা বৈধ। প্রকৃতপক্ষে আমি উদাহরণগুলি উত্পন্ন করেছিলাম যার সাথে আপনি কিছু উল্লেখ করেন। মানগুলির স্কেলিং সম্পর্কে কেবল সতর্কতা অবলম্বন করুন। উদাহরণস্বরূপ এটি 1 টির উপরে সমস্ত মানকে একই রঙ দেওয়া হয়, যেমন মতলব (এবং সম্ভবত ম্যাটপ্লোটিব এর) যেমন imshowকরে
লুইস মেন্ডো

ভাল যুক্তি. নিশ্চিত কিনা imshow
dylnan

1
@ কামোরসো94 দয়া করে এখানে দেখুন
লুইস মেন্ডো

1
হ্যাঁ খুব স্পষ্ট
ক্রিস্টোফার

উত্তর:


3

ডায়ালগ এপিএল, 94 বাইট

'P2'
2⍴n←⎕
9
(⍪0){×≢⍵:(≢⍺)((⍉∘⌽⍺,↑)∇↓)⍵⋄⍺}2↓{⍵⌊1+⍵[+\p]}⍣≡9×~p←1=⊃+/(≠⍨,≠⍨,~⍴⍨(×⍨n)-2×≢)¨,\×⍳n

অনুমান ⎕IO=0

এন = 701 (.pgm থেকে .png রূপান্তরিত) এর জন্য আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


10

ম্যাটল্যাব - 197 185 178 175 184 163 162 148 142 140 বাইট

অ্যান্ডার এবং আন্দ্রেসকে ধন্যবাদ 12 টি বাইট, এবং দুজনকে একসাথে রাখার জন্য লুইসকে প্রচুর ধন্যবাদ। রিমকোকে 16 টি ধন্যবাদ, ফ্লাওয়ারের জন্য 6 ধন্যবাদ

function F(n)
p=@primes
s=@isprime
for a=2:n^2
c=0
if~s(a)
b=nnz(p(a))
while~s(b)
b=nnz(p(b))
c=c+1
end
end
d(a)=c
end
imagesc(d(spiral(n)))

N=301( F(301)) এর জন্য ফলাফল :

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা:

function F(n)
p=@primes % Handle
s=@isprime % Handle
for a=2:n^2 % Loop over all numbers
    c=0 % Set initial count
    if~s(a) % If not a prime
        b=nnz(p(a)) % Count primes
        while~s(b) % Stop if b is a prime. Since the code starts at 2, it never reaches 1 anyway
            b=nnz(p(b)) % count again
            c=c+1 % increase count
        end
    end
    d(a)=c % store count
end
imagesc(d(spiral(n))) % plot

8

ওল্ফ্রাম ভাষা (গণিত) , 124 বাইট

12 বাইট সংরক্ষণের জন্য মার্টিন ইন্ডারকে ধন্যবাদ !

Image[#/Max@#]&[Array[(n=0;Max[4#2#2-Max[+##,3#2-#],4#
#-{+##,3#-#2}]+1//.x_?CompositeQ:>PrimePi[++n;x];n)&,{#,#},(1-#)/2]]&

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


উত্পন্ন চিত্রটি হ'ল:

সর্পিল

আমার এই উত্তর থেকে সরাসরি নেওয়া সর্পিল মানটির বন্ধ ফর্ম সূত্র ।


5
#/2-.5একটি বাইট সংরক্ষণ করে।
ব্যবহারকারী 202729

8
হাহাহা, আপনি কি নিজের কাছে পরামর্শ দিচ্ছেন?
লুইস মেন্ডো

6
@ user202729 কাজ করছে বলে মনে হচ্ছে না।
ব্যবহারকারী 202729

18
আমি আপনার অভ্যন্তরীণ কথোপকথনটি বাধাগ্রস্ত করতে চাইছিলাম না :
লুইস মেন্ডো

pআপনার প্রয়োজন না হওয়া পর্যন্ত এর সংজ্ঞাটি স্থগিত করুন:...,{y,p=(1-#)/2,-p},{x,p,-p}
মার্টিন এন্ডার

7

ম্যাটল্যাব: 115 114 110 বাইট

একটি লাইনার ( স্ক্রিপ্ট হিসাবে ফাংশন হিসাবে R2016b + এ চালানো হয় ) 115 বাইট

I=@(N)imagesc(arrayfun(@(x)s(x,0),spiral(N)));function k=s(n,k);if n>1&~isprime(n);k=s(nnz(primes(n)),k+1);end;end

Flawr দ্বারা প্রস্তাবিত হিসাবে একটি পৃথক ফাংশনে ফাংশন রাখা এবং অতিরিক্ত ফাইলের নিয়ম অনুযায়ী 1 টি অতিরিক্ত বাইট ব্যবহার করা

ফাইলটিতে s.m, কোড + ফাইলের জন্য 64 + 1 বাইট

function k=s(n,k);if n>1&~isprime(n);k=s(nnz(primes(n)),k+1);end

I45 বাইট নির্ধারণ করতে কমান্ড উইন্ডো

I=@(N)imagesc(arrayfun(@(x)s(x,0),spiral(N)))

মোট: 110 বাইট


এটি পরিবর্তে পুনরাবৃত্তি ব্যবহার করে while অন্যান্য ম্যাটল্যাব বাস্তবায়নের মতো ( জিনোভাইস , অ্যাড্রিয়ায়ান ) লুপিংয়ের uses এটি স্ক্রিপ্ট হিসাবে চালান (R2016b বা আরও নতুনতে), এটি ফাংশনটিকে সংজ্ঞায়িত করে Iযা চালানো যেতে পারে I(n)

কাঠামোযুক্ত সংস্করণ:

% Anonymous function for use, i.e. I(301)
% Uses arrayfun to avoid for loop, spiral to create spiral!
I=@(N)imagesc(arrayfun(@(x)s(x,0),spiral(N)));

% Function for recursively calculating the s(n) value
function k=s(n,k)
    % Condition for re-iterating. Otherwise return k unchanged
    if n>1 && ~isprime(n)
        % Increment k and re-iterate
        k = s( nnz(primes(n)), k+1 );
    end
end

উদাহরণ:

I(301)

চক্রান্ত

নোট:

  • আমি sফাংশনটিও বেনামে রাখার চেষ্টা করেছি অবশ্যই এটি গণনা উল্লেখযোগ্যভাবে হ্রাস করবে। তবে, এখানে 2 টি সমস্যা রয়েছে:

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

    2. এটি যদি পুনরাবৃত্ত হয় তবে আপনাকে নিজের কাছে একটি বেনামি ফাংশনটি পাস করতে হবে ( এখানে দেখুন ) যা বাইট যুক্ত করে।

    নিম্নলিখিত লাইনগুলি ব্যবহার করে আমি এর নিকটে এসেছি, সম্ভবত এটি কাজ করে পরিবর্তিত হতে পারে:

    % Condition, since we need to use it twice 
    c=@(n)n>1&&~isprime(n);
    % This uses a bodged ternary operator, multiplying the two possible outputs by
    % c(n) and ~c(n) and adding to return effectively only one of them
    % An attempt was made to use &&'s short-circuiting to avoid infinite recursion
    % but this doesn't seem to work!
    S=@(S,n,k)~c(n)*k+c(n)&&S(S,nnz(primes(n)),k+1);

6

ম্যাটল্যাব - 126 121 * বাইট

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

function t(n),M=1:n^2;c=0;i=1;s=@isprime;v=cumsum(s(M));while any(i),i=M>1&~s(M);c=c+i;M(i)=v(M(i));end;imagesc(c(spiral(n)))

এবং এখানে সুন্দর বিন্যাসিত সমাধান:

function t(n),
  M = 1:n^2;
  c = 0;
  i = 1;
  s = @isprime;
  v = cumsum(s(M));
  while any(i),         % *See below
    i = M > 1 & ~s(M);
    c = c+i;
    M(i) = v(M(i));
  end;
  imagesc(c(spiral(n)))

* নোট: আপনি অপ্রয়োজনীয় পুনরাবৃত্তিও একটি মেট্রিক crapton করার অনুমতি ইচ্ছুক, আপনি লাইন পরিবর্তন করতে পারেন while any(i), থেকে for m=v, এবং 5 বাইট সংরক্ষণ।


নিস! আমি পছন্দ করি আপনি কীভাবে cumsumভেক্টরাইজ এবং এড়ানোর জন্য ব্যবহার করেনnnz(primes(...)
লুইস মেন্ডো

1
আমি যদি সঠিকভাবে বুঝতে পারি তবে এটি প্রয়োজনীয়তার চেয়ে বেশি বার পুনরাবৃত্তি করতে ব্যথিত হবে না (গতির দামে)। সুতরাং আপনি while any(i)দ্বারা প্রতিস্থাপন করতে পারেন for m=M। কোডটি চালাতে কয়েক ঘন্টা সময় লেগেছিল কিনা কে কে খেয়াল করে
লুইস মেন্ডো

2
@ লুইস মেন্ডো: অবশ্যই, কেন নয়? এটি ইতিমধ্যে প্রয়োজনের চেয়ে আরও একবার n^2পুনরাবৃত্তি করে, অন্য কি বা পুনরাবৃত্তিগুলি ক্ষতিগ্রস্থ হতে পারে! ;)
জিনোভিস

1
এটাই স্পিরিট! আপনি দ্রুত-চলমান সংস্করণটিও রাখতে পারেন, তবে বাইট সংখ্যাটি সংক্ষিপ্ত
লুইস মেন্ডো

2

পাইথন 3, 299 265 বাইট

জোনাথন ফ্রেচ এবং নুন আইশহিরের ফর্ম্যাট করার পরামর্শের জন্য 5 বাইট সংরক্ষণ করা হয়েছে। কেবলমাত্র একবার বলা হয়েছিল এমন একটি ফাংশন সংজ্ঞা মুছে ফেলার মাধ্যমে অতিরিক্ত 34 বাইট সরানো হয়েছে।

অজগরটি আধ্যাত্মিকতা নির্ধারণের জন্য আদেশ না পেয়ে বা অ্যারে ঘেরাও করার কারণে এটি অন্য কারও চেয়ে কিছুটা দীর্ঘ। এটি তুলনামূলকভাবে দ্রুত চলে তবে প্রায় এক মিনিটের জন্য n = 700

from pylab import*
def S(n):
 q=arange(n*n+1);t=ones_like(q)
 for i in q[2:]:t[2*i::i]=0
 c=lambda i:0 if t[i]else 1+c(sum(t[2:i]));S=[c(x)for x in q]
 t=r_[[[S[1]]]]
 while any(array(t.shape)<n):m=t.shape;i=multiply(*m)+1;t=vstack([S[i:i+m[0]],rot90(t)])
 return t

এটি দিয়ে পরীক্ষা করুন

n = 7
x = S(n)
imshow(x, interpolation='none')
colorbar()
show(block=False)


1
একটি দ্রুত জিনিস: আপনি importএবং এর মধ্যে স্থান সরাতে পারেন *
NoOneIs এখানে

2

জে, 121 বাইট

load 'viewmat'
a=:3 :'viewmat{:@((p:inv@{.,>:@{:)^:(-.@((=1:)+.1&p:)@{.)^:_)@(,0:)"0(,1+(i.@#+>./)@{:)@|:@|.^:(+:<:y),.1'

একটি ফাংশন সংজ্ঞায়িত:

a=:3 :'viewmat{:@((p:inv@{.,>:@{:)^:(-.@((=1:)+.1&p:)@{.)^:_)@(,0:)"0(,1+(i.@#+>./)@{:)@|:@|.^:(+:<:y),.1' | Full fuction
                                                                     (,1+(i.@#+>./)@{:)@|:@|.^:(+:<:y),.1  | Creates the number spiral
              {:@((p:inv@{.,>:@{:)^:(-.@((=1:)+.1&p:)@{.)^:_)@(,0:)"0                                      | Applies S(n) to each element
       viewmat                                                                                             | View the array as an image

2

আর, 231 বাইট

function(n){p=function(n)sum(!n%%2:n)<2;M=matrix(0,n,n);M[n^2%/%2+cumsum(c(1,head(rep(rep(c(1,-n,-1,n),l=2*n-1),rev(n-seq(n*2-1)%/%2)),-1)))]=sapply(1:(n^2),function(x){y=0;while(x>2&!p(x)){x=sum(sapply(2:x,p));y=y+1};y});image(M)}

সামান্য কম গল্ফড:

function(n){
    p=function(n)sum(!n%%2:n)<2 #"is.prime" function
    M=matrix(0,n,n)             #empty matrix
    indices=n^2%/%2+cumsum(c(1,head(rep(rep(c(1,-n,-1,n),l=2*n-1),rev(n-seq(n*2-1)%/%2)),-1)))
    values=sapply(1:(n^2),function(x){
        y=0
        while(x>2&!p(x)){
            x=sum(sapply(2:x,p))
            y=y+1
            }
        y})
    M[indices]=values
    image(M) #Plotting
}

বেনামে ফাংশন। একটি গ্রাফিক উইন্ডোতে আউটপুট। স্কেলটি সবচেয়ে বেশি গা dark় শেডের সমান এবং মাপসই শেডগুলি বৃদ্ধিকারী মানগুলির সাথে লাল স্কেলে রয়েছে।

এন = 101 এর ফলাফল:

এন = 101

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.