তাদের প্রতিবেশীদের সাথে প্রাইম এক্সপোনারদের অদলবদল করুন


13

( তাদের প্রতিবেশীদের সাথে বিটগুলি অদলবদল করা সম্পর্কে আমার প্রশ্নের অনুসরণ করুন )

কার্য

ধনাত্মক পূর্ণসংখ্যা দেওয়া x = (2  · 3 বি ) · (5 সি  · 7 ডি ) · (11  · 13 ) ·… , প্রতিটি ক্রমাগত জোড় প্রাইমের জন্য এই গুণকটিতে এক্সপোজারগুলিকে অদলবদল করে প্রাপ্ত পূর্ণসংখ্যাটি মুদ্রণ করুন, y = (2 বি  · 3 ) · (5 ডি  · 7 সি ) · (11  · 13 ) ·…

ওইআইএসে A061898 । এটি , তাই সংক্ষিপ্ততম প্রোগ্রামটি (বাইটে) জিতেছে!

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

1 -> 1
2 -> 3
3 -> 2
10 -> 21
37 -> 31
360 -> 756
12345 -> 11578
67895678 -> 125630871

আমরা কি 1 এর পরিবর্তে সত্য ফিরিয়ে দিতে পারি ?
ডেনিস

@ ডেনিস কিছু বিবেচনা করার পরে, আমি সিদ্ধান্ত নিয়েছি যে আমার উত্তরটি নেই। আউটপুট অবশ্যই কমপক্ষে একটি সংখ্যার মতো দেখতে হবে ।
লিন

উত্তর:


6

জেলি , 10 বাইট

ÆE;0s2UFÆẸ

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

ÆE;0s2UFÆẸ  Main link. Argument: n

ÆE          Yield the exponents of n's prime factorization.
  ;0        Append a zero.
    s2      Split into pairs.
      U     Upend; reverse each pair.
       F    Flatten the resulting list of pairs.
        ÆẸ  Convert the prime exponents to integer.

4

জেলি, 17 16 11 বাইট

ডেনিসকে 5 বাইট ধন্যবাদ

ÆfÆC’^1‘ÆNP

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

ব্যাখ্যা

ÆfÆC’^1‘ÆNP   Main monadic chain. Argument: n

Æf            Yield the prime factors of n.
  ÆC          For each factor, count the number of primes below it.
              This effectively yields their indices.
    ’         Decrement [each] by 1.
     ^1       Xor with 1
       ‘      Increment [each] by 1.
        ÆN    Find their corresponding primes.
          P   Yield their product.

পূর্ববর্তী 16-বাইট সংস্করণ

ÆnÆRiЀÆf’^1‘ÆNP

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

ব্যাখ্যা

ÆnÆRiЀÆf’^1‘ÆNP   Main monadic chain. Argument: n

Æn                 Yield the next prime from n.
  ÆR               Yield all primes from 2 to it.
       Æf          Yield prime factors of n
    iЀ            Yield their index in the prime list.
         ’         Decrement [each] by 1.
          ^1       Xor with 1
            ‘      Increment [each] by 1.
             ÆN    Find their corresponding primes.
               P   Yield their product.

পূর্ববর্তী 17-বাইট সংস্করণ:

ÆnÆR©iЀÆf’^1‘ị®P

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

ব্যাখ্যা

ÆnÆR©iЀÆf’^1‘ị®P   Main monadic chain. Argument: n

Æn                  Yield the next prime from n.
  ÆR                Yield all primes from 2 to it.
    ©               Store to register.
        Æf          Yield prime factors of n
     iЀ            Yield their index in the prime list.
          ’         Decrement [each] by 1.
           ^1       Xor with 1
             ‘      Increment [each] by 1.
              ị®    Find their corresponding primes in
                    the list in register.
                P   Yield their product.

3

গণিত, 70 69 বাইট

1##&@@(Prime[BitXor[PrimePi@#+1,1]-1]^#2&)@@@FactorInteger@#/._@_->1&

একটি নামবিহীন ফাংশন যা পূর্ণসংখ্যা গ্রহণ করে এবং প্রদান করে। এটি ইনপুটটিতে ত্রুটি ছুঁড়েছে 1তবে এখনও সঠিক ফলাফলের গণনা করে।

ব্যাখ্যা

যথারীতি, সমস্ত সিনট্যাকটিক চিনির কারণে, পড়ার ক্রমটি কিছুটা মজার। একটি &অধিকার সংজ্ঞায়িত একটি নামহীন ফাংশন এবং এর আর্গুমেন্টগুলি এর দ্বারা উল্লেখ করা হয় #, #2, #3, ইত্যাদি

...FactorInteger@#...

আমরা ইনপুট ফ্যাক্টরিং দিয়ে শুরু করি। এটি জোড়গুলির একটি তালিকা দেয় {prime, exponent}যেমন ইনপুট 12দেয় {{2, 2}, {3, 1}}। কিছুটা অসুবিধে হয়, 1দেয় {{1, 1}}

(...&)@@@...

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

...PrimePi@#...

আমরা অন্তর্নির্মিতটি ব্যবহার করে (প্রাইম) ইনপুট সহ প্রাইমগুলির সংখ্যা গণনা করি PrimePi। এটি আমাদেরকে প্রাইমের সূচক দেয়।

...BitXor[...+1,1]-1...

ফলাফলটি বর্ধিত হয়, এর সাথে এক্সওআরড হয় 1এবং আবার হ্রাস পায়। এই অদলবদল 1 <-> 2, 3 <-> 4, 5 <-> 6, ..., অর্থাৎ সমস্ত 1-ভিত্তিক সূচকগুলি। নোট যে ইনপুট 1সমর্পণ করা হবে 0জন্য PrimePiযা পরে ম্যাপ করা হয় -1এই প্রক্রিয়ায়। আমরা পরে এটি মোকাবেলা করব।

 ...Prime[...]^#2...

আমরা এখন এন থাই প্রাইমটি পাই (যেখানে এনটি পূর্ববর্তী গণনা থেকে ফলাফল), যা সঠিকভাবে অদলবদলপ্রাইম, এবং ইনপুটটির অনুক্রমের ক্ষেত্রে এটি মূল প্রাইমের শক্তিতে উত্থাপন করে। এই মুহুর্তে Prime[-1]একটি ত্রুটি ছুঁড়ে ফেলবে তবে নিজেই মূল্যহীন ফিরে আসবে। এই ক্ষেত্রে শক্তিটি 1এত তাড়াতাড়ি পুরো প্রক্রিয়াটি {Prime[-1]}ইনপুট 1এবং অন্য সমস্ত ইনপুটগুলির জন্য সঠিক প্রধান শক্তির একটি তালিকা দেয়।

 1##&@@...

এর পরে, আমরা কেবল সমস্ত মৌলিক শক্তিগুলিকে গুন করি। ফাংশনটির 1##&জন্য একটি আদর্শ গল্ফিং ট্রিক Times। দেখুন এই ডগা কিভাবে এটি কাজ করে জন্য (অধ্যায় "আর্গুমেন্ট ক্রমের সাথে")।

শেষ অবধি, আমাদের ইনপুটটির যত্ন নেওয়া দরকার 1যার জন্য উপরের সমস্তটি ফলাফল করেছিল Prime[-1]। একটি সহজ প্রতিস্থাপনের নিয়ম সহ আমরা এটি সহজেই ঠিক করতে পারি। মনে রাখবেন যে এর f@xজন্য সংক্ষিপ্ত f[x]। আমরা কেবলমাত্র সেই ফর্মের যে কোনও অভিব্যক্তির সাথে মিল রাখতে চাই (যেহেতু অন্য সমস্ত ফলাফলগুলি পূর্ণসংখ্যা হবে, অর্থাৎ পারমাণবিক এক্সপ্রেশন হবে) এবং এর সাথে এটি প্রতিস্থাপন করতে হবে 1:

.../._@_->1

এখানে, /.-এর সংক্ষিপ্ত রূপ ReplaceAll, _@_ফর্মের কিছু জন্য একটি প্যাটার্ন f[x](ক একক সন্তানের সঙ্গে অর্থাত কোনো যৌগ অভিব্যক্তি) এবং ->1"সঙ্গে প্রতিস্থাপন বলেছেন 1"।


3

পাইথন 2, 149 139 বাইট

ডেনিসকে 10 বাইট ধন্যবাদ

n=input()
p=f=1;w=[2]
while w[-1]<=n:f*=p;p+=1;w+=[p]*(-~f%p<1)
r=p=1;w=w[1:]
while n>1:
    p+=1
    while n%p<1:n/=p;r*=w[w.index(p)^1]
print r

input()পাইথন 2 এ কাজ করে?
নন ইনিহির

@ নাওআইনি এখানে হ্যাঁ, এটি eval(input())পাইথন 3 এর সমতুল্য
মেগো

2

এমএটিএল , 17 বাইট

EZqGYfy&mt2\Eq+)p

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

ব্যাখ্যা

এটি সরাসরি প্রকাশকারীদের ব্যবহার করে না। পরিবর্তে, এটি পরের বা পূর্ববর্তী প্রাইম দ্বারা প্রতিটি (সম্ভবত পুনরাবৃত্তি হওয়া) প্রধান ফ্যাক্টরটি অদলবদল করে।

EZq    % Implicit input. Multiply by 2
Zq     % Array with sequence of primes up to that (this is more than enough)
GYf    % Prime factors of input, with possible repetitions
y      % Duplicate array with sequence of primes
&m     % Indices of prime factors in the sequence of primes
t2\    % Duplicate, modulo 2. Gives 0 for even indices, 1 for odd
Eq     % Multiply by 2, add 1. Transforms 0 / 1 into -1 / 1 
+      % Add. This modifies the indices to perform the swapping
)      % Apply the new indices into the sequence of primes
p      % Product. Implicit display

2

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

~=primes
!n=prod(t->(~3n)[endof(~t[1])+1$1-1]^t[2],factor(2n))/3

এটি অনলাইন চেষ্টা করুন! শেষ পরীক্ষার ক্ষেত্রে টিআইওর জন্য খুব বেশি স্মৃতি দরকার, তবে আমি স্থানীয়ভাবে এটি যাচাই করেছি।

কিভাবে এটা কাজ করে

বিশেষ-বা ছোট হাতের অক্ষর ইনপুট এড়াতে 1 আমরা সংখ্যাবৃদ্ধি ইনপুট - - একটি খালি অভিধান গুণফল সংজ্ঞায়িত করা হয় না এন দ্বারা 2 এবং তার যুগল দ্বারা চূড়ান্ত ফলাফল ভাগ 3

factor(2n)অভিধান হিসাবে 2n এর মৌলিক উপাদানগুলির সমস্ত ধনাত্মক এক্সটেনশন দেয় । অভিধানটি পুনরাবৃত্তি করার সময়, আমরা কী-মান / মূল-ব্যয়কারী জোড়া পাব। ফাংশনটি prodএই জোড়াগুলি নেবে, t->...তাদের কাছে বেনামে ফাংশনটি প্রয়োগ করবে এবং ফলাফলগুলির পণ্যটি ফিরিয়ে দেবে।

প্রতিটি জোড়া জন্য T = (P, ঙ) , endof(~t[1])বা endof(primes(t[1]))রিটার্ন , যে কম বা সমান মৌলিক সংখ্যার সংখ্যা পি , যে অর্থ পি হয় প্রধানমন্ত্রী।

+1$1-1ক্রমবর্ধমান কে , এক্সওআর কে + 1 সহ 1 এবং ফলাফল হ্রাস পাবে। যদি কে বিজোড় হয়, কে + 1 সমান, তাই এক্সওআর বৃদ্ধি এবং চূড়ান্ত ফলাফলটি কে + 1 । যদি কে সম হয়, কে + 1 টি বিজোড়, তাই এক্সওআর হ্রাস পায় এবং চূড়ান্ত ফলাফলটি কে - 1 হয়

পরিশেষে, আমরা সব মৌলিক সংখ্যার গনা কম বা সমান 3N সঙ্গে (~3n)বা primes(3n)(সর্বোচ্চ মৌলিক উত্পাদক 2n কম বা সমান এন যদি এন> 2 , এবং সবসময় মধ্যে একটি মৌলিক ব্যাপার এন এবং 2n ), সূচক একটি নির্বাচন ট + + 1 বা কে - 1 , এবং এটির সাথে শক্তি বাড়ান^t[2]


2

পাইথন 2, 112 109 108 95 94 বাইট

f=lambda n,k=4,m=6,p=[3,2]:1/n or n%p[1]and f(n,k+1,m*k,m*m%k*[k]+p)or p[len(p)*2%4]*f(n/p[1])

আইডিয়নে এটি পরীক্ষা করুন ।

কিভাবে এটা কাজ করে

যখন এফ বলা হয়, এটি প্রথমে 1 / n গণনা করে । তাহলে ফলাফলের নন-জিরো হয়, এন হয় 1 এবং রিটার্ন 1

যদি এন> 1 , নিম্নলিখিতটি ঘটে থাকে।

  • তাহলে এন দ্বারা বিভাজ্য নয় পি [1] (প্রথমদিকে 2 ), n%p[1]একটি truthy মান উৎপাদ এবং

    f(n,k+1,m*k,m*m%k*[k]+p)

    ডাকা হয়।

    এই শাখাটি মৌলিক সংখ্যা উত্পন্ন করে যতক্ষণ না পেনাল্টিমেট একটি সমানভাবে n ভাগ করে দেয় । এটি করার জন্য, এটি উইলসনের উপপাদ্যের নীচের ছদ্মবেশ ব্যবহার করে ।

    উইলসনের উপপাদ্যটির প্রতীক

    সব সময়ে, মি গৌণিক সমান ট - 1 (প্রাথমিকভাবে 6 = 3! এবং 4 প্রতিটি পুনরাবৃত্তির সালে, ফলাফল। m*m%k*[k]মৌলিক সংখ্যার লিস্টে prepended পরার পি সম্পুরক দ্বারা। m*m%kহয় 1 যদি মৌলিক এবং 0 যদি না, তাই এই prepends k করার পি যদি এবং কেবল যদি একটি মৌলিক সংখ্যা।

  • তাহলে এন দিয়ে বিভাজ্য পি [1] , n%p[1]উৎপাদ 0 এবং

    p[len(p)*2%4]*f(n/p[1])

    মৃত্যুদন্ড কার্যকর করা হয়।

    পিতে যদি একটি সংখ্যক মৌলিক সংখ্যা থাকে তবে 0 প্রদানlen(p)*2%4 করবে এবং প্রথম গুণকটি পি [0] এর মান গ্রহণ করবে । যদি পিতে বিজোড় সংখ্যক মৌলিক সংখ্যা থাকে তবে 2 টি প্রদান করবে এবং প্রথম গুণকটি পি [2] এর মান গ্রহণ করবে ।len(p)*2%4

    উভয় ক্ষেত্রেই, এই মৌলিক যার বহিঃপ্রকাশ হয়েছে এক সঙ্গে আনা পেতে হয় পি [1] তাই আমরা বিভক্ত করা, এন দ্বারা পি [1] (দ্বারা এক্সপোনেন্ট কমে 1 ) এবং সংখ্যাবৃদ্ধি ফল f(n/p[1])প্রধানমন্ত্রী সংশ্লিষ্ট দ্বারা (বৃদ্ধি 1 দ্বারা উদ্ঘাটনকারী )।

    নোট করুন যে তাদের ডিফল্ট মানগুলিতে k , m এবং pf(n/p[1]) পুনরায় সেট করে । দক্ষতা উন্নতি করতে হবে, ছয় অতিরিক্ত বাইট খরচ।f(n/p[1],k,m,p)


1

পাইথ, 25 বাইট

JfP_TSfP_ThQ*F+1m@Jx1xJdP

পরীক্ষা স্যুট.

ব্যাখ্যা

JfP_TSfP_ThQ*F+1m@Jx1xJdP

           Q    get input
          h     add one
      fP_T      find the first prime after it
     S          range from 1 to that prime
 fP_T           filter for the primes
J               assign to J

                        P  prime factorize input
                m      d   for each factor
                     xJ    find its index in J
                   x1      xor with 1
                 @J        find the corresponding entry in J
            *F+1           product of the whole list

1

জুলিয়া, 155 131 127 বাইট

n->(x=[sort([merge([p=>0for p=primes(n+1)],factor(n))...]);1=>0];prod([x[i-1][1]^x[i][2]*x[i][1]^x[i-1][2]for i=2:2:endof(x)]))

এটি একটি বেনামে ফাংশন যা কোনও পূর্ণসংখ্যা গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন। এটির জন্য জুলিয়া সংস্করণ <0.5 প্রয়োজন because কারণ মূল কার্যকারিতা 0.5 থেকে বেস থেকে সরিয়ে দেওয়া হয়েছে।

Ungolfed:

function f(n::Int)
    # Create an array of pairs by merging the Dict created from factoring n
    # with all primes less than n+1 with a 0 exponent. Append an extra pair
    # to account for 1 and situations where x would otherwise have odd length.
    x = [sort([(merge([p=>0 for p in primes(n+1)], factor(n))...]); 1=>0]

    # Compute a^d * c^b, where a and c are primes with b and d as their
    # respective exponents.
    prod([x[i-1][1]^x[i][2] * x[i][1]^x[i-1][2] for i = 2:2:endof(x)])
end

এটি অনলাইন চেষ্টা করুন! (সমস্ত পরীক্ষার কেস অন্তর্ভুক্ত)



1

05 এ বি 1 ই, 22 বাইট

Ó¾‚˜2ô€R˜DgL<Ø)øvy`smP

ব্যাখ্যা

Ó¾‚˜                    # list of primeexponents with a 0 appended: n=10 -> [1,0,1,0] 
    2ô                  # split into pairs: [[1,0],[1,0]]
      €R˜               # reverse each pair and flatten: [0,1,0,1]
         DgL<Ø          # get list of primes corresponding to the exponents: [2,3,5,7]
              )ø        # zip lists: [[0,2],[1,3],[0,5],[1,7]]
                vy`sm   # raise each prime to its new exponent: [1,3,1,7]
                     P  # product: 21

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


0

জে, 21 বাইট

([:,_2|.\,&0)&.(_&q:)

জিরোসের সাথে প্রধান শক্তি হিসাবে n এর প্রধান এক্সপোজারগুলি পান। তারপরে অতিরিক্ত শূন্যের সাথে পূরণ করার সময় তাদের মাপ 2 এর ননওভারল্যাপিং সাবলিস্টগুলিতে ভাগ করুন। তারপরে প্রতিটি সাবলিস্ট বিপরীত করুন এবং এগুলি একটি তালিকায় সমতল করুন। শেষ অবধি, প্রধান প্রকাশকারী থেকে একটি সংখ্যায় ফিরে রূপান্তর।

ব্যবহার

   f =: ([:,_2|.\,&0)&.(_&q:)
   (,.f"0) 1 2 3 10 37 360 12345
    1     1
    2     3
    3     2
   10    21
   37    31
  360   756
12345 11578
   f 67895678x
125630871

ব্যাখ্যা

([:,_2|.\,&0)&.(_&q:)  Input: n
                _&q:   Obtain the list of prime exponents
(           )&.        Apply to the list of prime exponenets
         ,&0           Append a zero to the end of the list
    _2  \              Split the list into nonoverlapping sublists of size 2
      |.               Reverse each sublist
 [:,                   Flatten the list of sublists into a list
             &.(    )  Apply the inverse of (Obtain the list of prime exponents)
                       to convert back to a number and return it
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.