প্রাইমিতে একটি পদক্ষেপে উঠুন


24

Numberphile এর নতুন ভিডিও, শিরোনাম 13532385396179 , নিম্নলিখিত ফাংশন একটি নির্দিষ্ট বিন্দু ধনাত্মক পূর্ণসংখ্যা করুন:

যাক এন একটি ধনাত্মক পূর্ণসংখ্যা হতে। প্রাইম ফ্যাক্টরিয়েশনটি স্বাভাবিক উপায়ে লিখুন, যেমন =০ = ২ · 3 · 5, যাতে প্রাইমগুলি ক্রমবর্ধমান ক্রমে লিখিত হয় এবং ১ এর প্রকাশক বাদ দেওয়া হয়। তারপর, লাইন নিচে বহিঃপ্রকাশ আনতে এবং বর্জন সব গুণ লক্ষণ একটি সংখ্যা প্রাপ্তির (ঢ)। [...] উদাহরণস্বরূপ, (60) = (2 2 · 3 · 5) = 2235।

(উপরের সংজ্ঞাটি পাঁচটি $ 1,000 সমস্যার মধ্যে 5 থেকে নেওয়া হয়েছে - জন এইচ কনওয়ে )

মনে রাখবেন (13532385396179) = (13 · 53 2 · 3853 · 96179) = 13532385396179।

কার্য

nইনপুট এবং আউটপুট হিসাবে একটি ধনাত্মক সম্মিলিত পূর্ণসংখ্যা গ্রহণ করুন f(n)

আরেকটি উদাহরণ

48 = 2 4 · 3, সুতরাং (48) = 243।

Testcases

আরও টেস্টকেস এখানে পাওয়া যায়

   4 -> 22
   6 -> 23
   8 -> 23
  48 -> 243
  52 -> 2213
  60 -> 2235
 999 -> 3337
9999 -> 3211101

11
+1 আমি এখনও অবাক হয়েছি যে কেউ অনুমানের ত্রুটি হিসাবে 13532385396179 খুঁজে পেয়েছে। আমার ধারণা $ 1000 ডলার পুরস্কারটি ব্যবহার করা বিদ্যুতের জন্য কিছুটা দিতে হবে! :)
উইসনেম

7
লিঙ্কটি অনুসরণ না করে এটি পরিষ্কার ছিল না যে অনুমানটি হ'ল বারবার f (n) এর প্রয়োগগুলি সর্বদা একটি প্রাইমে পৌঁছে যাবে (এবং অবশ্যই f (p) = p যদি p মৌলিক হয়)। 13532385396179 অনুমানটিকে অস্বীকার করে কারণ এটি উভয় সম্মিলিত এবং একটি স্থির মতামত।
ক্রিস এইচ

উত্তর:


16

পাইথন, 166 162 159 বাইট

আপনি ছেলেরা অনেক ভাল। এই আমি ব্যবহার! (যে অ্যালগরিদম এটি সমাধান করেছে এটি এটিকে বলে)

from primefac import*
def c(n):
 x=factorint(n)
 a=''
 for i in range(len(x)):
  l=min(x.keys())
  a+=str(l)
  if x[l]>1:a+=str(x[l])
  x.pop(l)
 return int(a)

2
@LakyNun যেমন করে কেউ তার উত্তরকে উন্নত করতে সহায়তা করার পরিবর্তে কেন একজন নতুন আগতকে নীচে ফেলেছিল? :(
শেগি

3
দুঃখিত - সত্যই আমি এটি ব্যবহার করেছি (আমি নম্বরটি পেয়েছি)। আমি কেবল ভেবেছিলাম ক্রামি কোডটি মজার হবে। আপনি এটি নিচে নিতে পারেন।
jchd

9
সাইটে স্বাগতম। আপনার সমাধানটি আমাদের সাথে ভাগ করে নিতে পেরে খুব সুন্দর। (যারা জানেন না তাদের জন্য, জিম ডেভিস হলেন তিনিই প্রথম এই সমস্যাটি সমাধান করেছিলেন)। তবে, চ্যালেঞ্জগুলির উত্তরগুলির জন্য কিছু বিধি অনুসরণ করা প্রয়োজন follow আপনি যদি কেবলমাত্র @LeakyNun এর পরামর্শ অনুসরণ করেন তবে আপনার উত্তরটি বৈধ হবে। (সাধারণত তারা দেখতে কেমন তা দেখতে অন্যান্য উত্তরগুলির দিকে নজর দিন)
দাদা

4
ওহ Godশ্বর, আমি জিম ডেভিস নিজেই এই সাইটে উপস্থিত হবে এবং আমার চ্যালেঞ্জের উত্তর দেওয়ার প্রত্যাশা করিনি ... আমি এখন নিজেকে অনেক সম্মানিত বোধ করছি ...
লিকি নুন

2
হ্যাঁ, উপায় দ্বারা একটি ট্রল না। আমার ইমেল ঠিকানাটি গ্ল্যাহডোবাইপ্রেস.ব্লগস্পট.সি.আ . / ব্লগস্পট.সি.আর / ৪ / ১০ / ক্লিমেট-টু-প্রাইম এইচটিএমএল ... আমি পোস্টটি ছেড়ে দিয়েছি, কেউ আপনাকে গণিতের উপরে ইমেল দিয়ে স্যাম্প করে না।
jchd

9

ব্র্যাচল্যাগ , 8 বাইট

ḋoọc;1xc

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

ব্যাখ্যা

Example input: 60

ḋ          Prime decomposition: [5,3,2,2]
 o         Order: [2,2,3,5]
  ọ        Occurences: [[2,2],[3,1],[5,1]]
   c       Concatenate: [2,2,3,1,5,1]
    ;1x    Execute 1s: [2,2,3,5]
       c   Concatenate: 2235

আপনি ব্যবহার করতে পারেন ℕ₂ˢ( এর চেয়ে বড় বা 2 সমান সব পূর্ণসংখ্যার নির্বাচন পরিবর্তে) ;1xযা সম্ভবত আরো পাঠযোগ্য এবং Brachylog আত্মা আরও হয়।


9

জেলি , 6 বাইট

ÆFFḟ1V

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

ব্যাখ্যা

ÆF      Get prime factorisation of input as prime-exponent pairs.
  F     Flatten.
   ḟ1   Remove 1s.
     V  Effectively flattens the list into a single integer.

V= "একক স্ট্রিংয়ের
সাথে একাত্ম

@ এরিকথিউটগল্ফার হ্যাঁ, তাই "কার্যকরভাবে"।
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার কোনও বিশেষ কারণ আপনি ব্যবহার করেন না (দশমিক থেকে পূর্ণসংখ্যায় রূপান্তর)?
ছিটান

@ ক্রিশ্চিয়ান কারণ তালিকায় বহু সংখ্যার পূর্ণসংখ্যা থাকতে পারে।
মার্টিন ইন্ডার

নিবন্ধন করুন আমি FḌঅতীতে ব্যবহার করেছি - এটি একটি ভাল টিপ!
ছিটান

5

গণিত, 43 36 বাইট

Row@Flatten@FactorInteger@#/. 1->""&

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


2
DeleteCasesদীর্ঘ, আপনি ব্যবহার করতে পারেন /.1->""বা /.1->##&[](বিকল্প ফর্ম/.1->Nothing
user202729

3
@ ব্যবহারকারী202729 তাদের 1পার্সিং থেকে আটকাতে প্রতিরোধ করার জন্য তাদের সকলের সামনে একটি স্থান প্রয়োজন ... / (0.1)
মার্টিন ইন্ডার

তুমি ঠিক! স্থির
J42161217

4

সিজেম , 8 বাইট

limF:~1-

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

ব্যাখ্যা

li  e# Read input and convert to integer.
mF  e# Get prime factorisation as prime-exponent pairs.
:~  e# Flatten.
1-  e# Remove 1s.
    e# Implicitly print a flattened representation of the list.

আমি e_ফ্ল্যাট করতে ব্যবহার করতাম , যেহেতু এটি এখানে রয়েছে তবে এটি স্কোর পরিবর্তন করে না।
পিটার টেলর

1
@ পিটারটেলর এইচএম হ্যাঁ, কোনটি ব্যবহার করব তা আমি কখনই স্থির করতে পারি না, তবে e_কেবল গভীর সমতল জন্য ব্যবহার করতে এবং :~যখনই এটি কেবলমাত্র একক স্তর থাকে তখনই ব্যবহার করার ঝোঁক ।
মার্টিন ইন্ডার



2

পাইথ, 12 বাইট

smjk_>hddr8P

চেষ্টা করে দেখুন!

বিকল্প, 12 বাইট

smjk<_AdGr8P

চেষ্টা কর!

ব্যাখ্যা

smjk_>hddr8P
           PQ  # prime factorization (already in correct order) of the implicit input: [3, 3, 11, 101]
         r8    # length encode: [[2, 3], [1, 11], [1, 101]]
 m             # map over the length encoded list (lambda variable: d)
     >hdd      # take the d[0] last elements of d (so only the last for d[0]==1 and all else)
    _          # reverse that list
  jk           # join into a string
s              # conatenate the list of strings


2

পাইথন 2 , 99 বাইট

n=input()
r=''
p=2
while~-n:
 e=0
 while n%p<1:e+=1;n/=p
 r+=str(p)*(e>0)+str(e)*(e>1);p+=1
print r

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

যদি ইনপুটগুলি নীচে থেকে সীমাবদ্ধ থাকে তবে 2147483659উভয়ই 6 টি বাইট সাশ্রয়ের str(...)দ্বারা প্রতিস্থাপিত হতে পারে `...`( যাইহোক প্রভাবিত সংখ্যার জন্য এই প্রোগ্রামটি খুব ধীর হবে !)।



1

জাপট , 19 বাইট

k ó¥ ®¯1 pZlÃc fÉ q

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

 k ó¥  ®   ¯  1 pZlà c fÉ  q
Uk ó== mZ{Zs0,1 pZl} c f-1 q  // Ungolfed
                              // Implicit: U = input number
Uk                            // Break U into its prime factors.
   ó==                        // Group into runs of equal items.
       mZ{         }          // Map each item Z in this to
          Zs0,1               //   Z.slice(0, 1) (the array of the first item),
                pZl           //   with Z.length added at the end.
                              // This returns an array of prime-exponent pairs (Jelly's ÆF).
                     c        // Flatten.
                       f-1    // Filter to the items X where X - 1 is truthy (removes '1's).
                           q  // Join the resulting array into a single string.
                              // Implicit: output result of last expression


0

সি #, 206 100 বাইট

n=>{var r="";for(int d=1,c;++d<=n;){c=0;while(n%d<1){c++;n/=d;}r+=c>0?d+(c>1?c+"":""):"";}return r;}

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

using System;

class P
{
    static void Main()
    {
        Func<int, string> func = n =>
        {
            var r = "";
            for (int d = 1, c; ++d <= n;)
            {
                c = 0;
                while (n % d < 1)
                {
                    c++;
                    n /= d;
                }

                r += c > 0 ? d + (c > 1 ? c + "" : "") : "";
            }

            return r;
        };

        Console.WriteLine(func(4));
        Console.WriteLine(func(6));
        Console.WriteLine(func(8));
        Console.WriteLine(func(48));
        Console.WriteLine(func(52));
        Console.WriteLine(func(60));
        Console.WriteLine(func(999));
        Console.WriteLine(func(9999));

        Console.ReadLine();
    }
}

0

জাভাস্ক্রিপ্ট - 91 বাইট

(x,r='',i=1,n)=>{while(x>i++){for(n=0;x%i<1;n++)x/=i;r+=(n>0?i+'':'')+(n>1?n:'')}return r}

ব্যাখ্যা

(x,r='',i=1,n)=>(          // input x is the number to process, r, i, n are default values only
    while(x>i++){          // iterate over i until x
        for(n=0;x%i<1;n++) // iterate over n until i is not a factor of x
            x/=i;          // factor i out of x
        r+=(n>0?i+'':'')   // append i to r if n > 0
            +(n>1?n:'')    // append n to r if n > 1
                           // i+'' prevents adding i and n before appending to r
    }
    return r               // return r by comma-operator and arrow function syntax
)

0

জাভা 8, 103 অক্ষর

খুব সোজা সমাধান।

n->{String r="";int d=2,c;while(n>1){c=0;while(n%d<1){c++;n/=d;}if(c>0)r+=d;if(c>1)r+=c;d++;}return r;}

Ungolfed:

private static Function<Integer, String> f = n->{
    String result = "";
    int divisor = 2, count;
    while (n>1) {
        count = 0;
        while (n % divisor < 1) {
            count++;
            n /= divisor;
        }
        if (count > 0) result += divisor;
        if (count > 1) result += count;
        divisor++;
    }
    return result;
};


0

অক্টাভা , 69 বাইট

@(a)printf('%d',(f=[[~,c]=hist(b=factor(a),d=unique(b));d](:))(f~=1))

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

বেশ দীর্ঘ হওয়া সত্ত্বেও এটি কাঙ্ক্ষিত আউটপুট উত্পন্ন করবে।

মূলত আমরা হিস্টোগ্রাম ফাংশনটি ইনপুট মানের প্রাথমিক গুণক হিসাবে স্বতন্ত্র মানগুলির সংখ্যার গণনা করতে ব্যবহার করি।

  • factor()ফাংশনটির ফলাফলটি আরোহী ক্রমের মূল কারণগুলি দেয়
  • তারপরে আমরা unique()সেই অ্যারেতে মান খুঁজে পাই
  • hist() সংখ্যার সংখ্যা প্রদান করে

একবার আমাদের দুটি অ্যারে (একটি অনন্য কারণের জন্য একটি, গণনাগুলির জন্য) হয়ে গেলে, আমরা উল্লম্বভাবে অ্যারেগুলি সংযুক্ত করি (অন্যটির উপরে একটি) এবং তারপরে সমতল করি। এটি গণনাগুলির সাথে কারণগুলি ইন্টারলেভ করে।

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




0

আর , 72 বাইট

x=rle(pracma::factors(scan()));x$l[x$l<2]='';paste0(x$v,x$l,collapse='')

pracmaপ্যাকেজটির প্রয়োজন , যা টিআইওতে ইনস্টল করা নেই।

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