এটি কি ধারাবাহিক-মৌলিক / ধ্রুবক-অঙ্কের সংখ্যা?


22

কিছুক্ষণ আগে, আমি 27000 এর মূল ফ্যাক্টরীকরণটি দেখেছিলাম:

27000 = 2 3 × 3 3 × 5 3

সে সম্পর্কে দুটি বিশেষ বিষয় রয়েছে:

  • ধারাবাহিক-প্রধান : প্রাইমগুলি পরপর: 2 টি প্রথম প্রধানমন্ত্রী, 3 তৃতীয় প্রধান, 5 তৃতীয় প্রধান prime
  • ধ্রুবক-ঘাতক : প্রতিটি প্রধানের জন্য প্রকাশক একই হয় (সর্বদা 3)

গাণিতিকভাবে প্রকাশিত:

একটি পূর্ণসংখ্যা x এর একটি পরপর প্রধানমন্ত্রী / নির্দিষ্ট-এক্সপোনেন্ট সংখ্যা যদি অস্তিত্ব কঠোরভাবে ধনাত্মক পূর্ণসংখ্যা হয় এন , , মি যেমন যে এক্স = P এন এম × পি এন + 1 মি × ... × পি এন + + মি , যেখানে P j হ'ল জে- তম প্রাইম

আপনার কাজটি পরীক্ষা করা যদি কোনও ইতিবাচক পূর্ণসংখ্যা এই শর্তগুলি পূরণ করে।

ইনপুট:

একটি ইতিবাচক পূর্ণসংখ্য> 1, কোনও যুক্তিসঙ্গত আকারে।

আউটপুট:

দুটি মানগুলির মধ্যে একটি, কমপক্ষে একটির ধ্রুবক হতে হবে, যা ইনপুটটি একটানা-প্রাইম / ধ্রুবক-এক্সপোনেন্ট নম্বর কিনা তা নির্দেশ করে।

এজ মামলাগুলি:

  • মৌলিক, truthy হিসাবে মৌলিক জন্য গুণকনির্ণয় পি হয় পি 1
  • অন্যান্য সংখ্যা যে পি এম হিসাবে লেখা যেতে পারে যেখানে পি একটি মৌলিক, সেগুলিও সত্য।

নিয়মাবলী:

  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।
  • পূর্ণসংখ্যা ওভারফ্লো সম্পর্কে কোনও উদ্বেগ নয়, তবে 255 পর্যন্ত সংখ্যাগুলি অবশ্যই কাজ করবে।
  • বাইটস মধ্যে সংক্ষিপ্ত কোড।

পরীক্ষার কেস:

Truthy:

2
3
4
5
6
7
8
9
11
13
15
27000
456533

Falsy:

10
12
14
72
10000000

এখানে একটি অজগর স্ক্রিপ্ট কিছু পরীক্ষার কেস তৈরি করে।

আমি যে কোনও উত্তর স্বীকার করেছি তার অর্থ এই নয় যে চ্যালেঞ্জটি শেষ হয়েছে; বিজয়ী এখনও পরিবর্তন করতে পারেন!


এই জাতীয় সমস্ত সংখ্যার একটি তালিকা তৈরি করে এবং ইনপুট তালিকায় রয়েছে কিনা তা পরীক্ষা করে আপনি সম্ভবত অন্যভাবে আসতে পারেন
ইঞ্জিনিয়ার টোস্ট

@ ইঞ্জিনিয়ারস্টোস্ট যদিও অসীম অনেক সত্য সংখ্যা রয়েছে।
অ্যালেক্সিস ওলসন

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

আপনার গাণিতিক এক্সপ্রেশনটির পিজে x = Pn^mঅংশটির সাথে সম্পর্কিত নয় । আমি ধরে নিচ্ছি আপনি বোঝাচ্ছেন পিএন হ'ল এন-
থাই

@Veskah এন একটি নির্দিষ্ট মান (প্রথম প্রধানমন্ত্রী বিভাজক সূচক আছে এক্স ,) তাই বলে PN হয় এন -th প্রধানমন্ত্রী বিশ্রী করেন তাহলে আপনি পরোক্ষভাবে চাই PN +1 হয় এন +1 -th প্রধানমন্ত্রী।
ডেনিস

উত্তর:


13

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

Ó0ÛË

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

ব্যাখ্যা

Ó     # get a list of prime exponents
 0Û   # remove leading zeroes
   Ë  # all remaining elements are equal

ÎÓKËএগুলি ছাড়া আমি যা ভাবতে পারি তা কেবলই চমৎকার ... আমি ভাবছিলাম ßতবে এটি আমার যা মনে হয়েছিল তার বিপরীতে ঘটে।
ম্যাজিক অক্টোপাস উরান

7

রেজেক্স (ইসিএমএসক্রিপ্ট), 276 205 201 193 189 বাইট

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

আমার অন্যান্য ইসিএমএ রেজেক্স পোস্টগুলির মতো, আমি একটি স্পয়লার সতর্কতা দেব : ইসমাস্ক্রিপ্ট রেজেক্সে অযৌক্তিক গাণিতিক সমস্যাগুলি কীভাবে সমাধান করা যায় তা শেখার আমি উচ্চতর পরামর্শ দিচ্ছি। এটি আমার কাছে একটি আকর্ষণীয় ভ্রমণ ছিল এবং আমি যে কারও জন্য সম্ভবত এটি চেষ্টা করতে চাইতে পারি তার পক্ষে এটি লুণ্ঠন করতে চাই না, বিশেষত যারা সংখ্যা তত্ত্বের প্রতি আগ্রহী তাদের জন্য। একের পর এক সমাধান করার জন্য পরের বার স্পয়লার-ট্যাগযুক্ত প্রস্তাবিত সমস্যার তালিকার জন্য এই আগের পোস্টটি দেখুন

সুতরাং আপনি যদি কিছু উন্নত ইউনারি রেজেক্স যাদু আপনার জন্য নষ্ট না করতে চান তবে আর পড়বেন না । আপনি যদি এই যাদুটি নিজেই বের করে আনতে চান তবে উপরের লিঙ্কযুক্ত পোস্টটিতে বর্ণিত ECMAScript রেজেক্সে কিছু সমস্যা সমাধানের মাধ্যমে আমি সুপারিশ করব।

আমি পূর্বে বিকাশকৃত একটি রেজেক্সের মূল পেইড এই চ্যালেঞ্জের জন্য খুব প্রযোজ্য বলে প্রমাণিত হয়েছিল। এটিই হ'ল রেজেক্স যা সর্বোচ্চ গুণনের মূল (গুলি) খুঁজে বের করে । যে জন্য আমার প্রথম সমাধান খুব দীর্ঘ ছিল, এবং আমি পরে এটা উপায় পর্যায়ে নেমে golfed, প্রথম এটা rewriting আণবিক lookahead ব্যবহার করতে , এবং তারপর এটি ফিরিয়ে প্লেইন এর নাম ECMAScript করার porting একটি উন্নত কৌশল ব্যবহার আণবিক lookahead অভাব প্রায় কাজ , এবং পরবর্তীকালে এটিকে গলফ করা মূল প্লেইন ECMAScript সমাধানের চেয়ে অনেক ছোট হতে হবে।

এই রেজেক্সের অংশটি যা এই সমস্যার জন্য প্রযোজ্য তা হ'ল প্রথম পদক্ষেপ, যা Q এর সন্ধান করে, এটি এন এর ক্ষুদ্রতম ফ্যাক্টর যা তার সমস্ত প্রধান উপাদানকে ভাগ করে দেয়। আমাদের এই সংখ্যাটি একবার হয়ে গেলে, আমাদের দেখতে হবে যে N একটি "ধ্রুবক-বহিঃসংখ্যক সংখ্যা", N দ্বারা Q দ্বারা বিভাজিত হয় যতক্ষণ না আমরা আর পারছি না; যদি ফলাফল 1 হয়, সমস্ত প্রাইমগুলি সমান গুণফলের হয়।

আমার সন্ধানের জন্য পূর্ববর্তী বিকাশযুক্ত অ্যালগরিদম ব্যবহার করে উত্তর জমা দেওয়ার পরে, আমি বুঝতে পেরেছিলাম যে এটি সম্পূর্ণ ভিন্ন উপায়ে গণনা করা যেতে পারে: এন এর বৃহত্তম বর্গমুক্ত ফ্যাক্টরটি আবিষ্কার করুন (আমার কারমাইকেল নম্বর রেজেক্সের মতো একই অ্যালগোরিদম ব্যবহার করে )। দেখা যাচ্ছে যে, আণবিক লুকআহেড এবং ভেরিয়েবল-দৈর্ঘ্যের লুকবিহীন (পূর্বে ব্যবহৃত উন্নত প্রযুক্তিটি টানতে হবে না) ঘাটতির আশেপাশে পদক্ষেপ নেওয়ার ক্ষেত্রে এটি কোনও অসুবিধা দেয় না এবং এটি 64 বাইট সংক্ষিপ্ত! অতিরিক্তভাবে এটি স্কয়ার-ফ্রি এন এবং প্রাইম এনকে বিভিন্ন বিশেষ কেস হিসাবে বিবেচনা করার জটিলতা দূর করে, এই দ্রবণ থেকে আরও 7 টি বাইট বাদ দেয়।

(এখনও অন্যান্য সমস্যা রয়ে গেছে যেগুলি Q এর গণনাটি গল্ফ করার জন্য এখানে আগে ব্যবহৃত উন্নত প্রযুক্তির প্রয়োজন, তবে বর্তমানে সেগুলির কোনওটিই আমার পিপিসিজি পোস্টগুলি উপস্থাপন করে না))

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

গ্রিমির দ্বারা প্রাপ্ত ট্রিকটি ব্যবহার করে আমি এই রেজেক্স (১৯৩ → ১৮৯) থেকে ৪ টি বাইট ফেলে দিতে সক্ষম হয়েছি যা ভাগফলটি বিভাজকের থেকে বড় বা সমান হওয়ার গ্যারান্টিযুক্ত ক্ষেত্রে এই সংক্ষিপ্ত বিভাগকে আরও সংক্ষিপ্ত করতে পারে।

^(?=(|(x+)\2*(?=\2$))((?=(xx+?)\4*$)(?=(x+)(\5+$))\6(?!\4*$))*x$)(?=.*$\2|((?=((x*)(?=\2\9+$)x)(\8*$))\10)*x$)(?!(((x+)(?=\13+$)(x+))(?!\12+$)(x+))\11*(?=\11$)(?!(\15\14?)?((xx+)\18+|x?)$))

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

# For the purposes of these comments, the input number = N.
^

# Assert that all of N's prime factors are of equal multiplicity
# Step 1: Find Q, the largest square-free factor of N (which will also be the smallest
# factor of N that has all the same prime factors as N) and put it in \2.
# If N is square-free, \2 will be unset.
(?=
    # Search through all factors of N, from largest to smallest, searching for one that
    # satisfies the desired property. The first factor tried will be N itself, for which
    # \2 will be unset.
    (|(x+)\2*(?=\2$))     # for factors < N: \2 = factor of N; tail = \2
    # Assert that tail is square-free (its prime factors all have single multiplicity)
    (
        (?=(xx+?)\4*$)    # \4 = smallest prime factor of tail
        (?=(x+)(\5+$))    # \5 = tail / \4 (implicitly); \6 = tool to make tail = \5
        \6                # tail = \5
        (?!\4*$)          # Assert that tail is no longer divisible by \4, i.e. that that
                          # prime factor was of exactly single multiplicity.
    )*x$
)
# Step 2: Require that either \2 is unset, or that the result of repeatedly
# dividing tail by \2 is 1.
(?=
    .*$\2
|
    (
        # In the following division calculation, we can skip the test for divisibility
        # by \2-1 because it's guaranteed that \2 <= \8. As a result, we did not need to
        # capture \2-1 above, and can use a better-golfed form of the division.
        (?=
            (              # \8 = tail / \2
                (x*)       # \9 = \8-1
                (?=\2\9+$)
                x
            )
            (\8*$)         # \10 = tool to make tail = \8
        )
        \10               # tail = \8
    )*
    x$                    # Require that the end result is 1
)

# Assert that there exists no trio of prime numbers such that N is divisible by the
# smallest and largest prime but not the middle prime.
(?!
    (                          # \11 = a factor of N
        (                      # \12 = a non-factor of N between \11 and \13
            (x+)(?=\13+$)      # \13 = a factor of N smaller than \11
            (x+)               # \14 = tool (with \15) to make tail = \13
        )
        (?!\12+$)
        (x+)                   # \15 = tool to make tail = \12
    )
    \11*(?=\11$)               # tail = \11

    # Assert that \11, \12, and \13 are all prime
    (?!
        (\15\14?)?             # tail = either \11, \12, or \13
        ((xx+)\18+|x?)$
    )
)


* এটি আণবিক চেহারা সহ এখনও পরিষ্কার, N এর জন্য বর্গমুক্ত কোনও বিশেষ ক্ষেত্রে নেই। এই 6 বাইট, একটি ফলনশীল ড্রপ 195 187 183 বাইট সমাধান:

^(?=(?*(x+))\1*(?=\1$)((?=(xx+?)\3*$)(?=(x+)(\4+$))\5(?!\3*$))*x$)(?=((?=((x*)(?=\1\8+$)x)(\7*$))\9)*x$)(?!(((x+)(?=\12+$)(x+))(?!\11+$)(x+))\10*(?=\10$)(?!(\14\13?)?((xx+)\17+|x?)$))

# For the purposes of these comments, the input number = N.
^

# Assert that all of N's prime factors are of equal multiplicity
# Step 1: Find Q, the largest square-free factor of N (which will also be the smallest
# factor of N that has all the same prime factors as N) and put it in \1.
(?=
    (?*(x+))              # \1 = proposed factor of N
    \1*(?=\1$)            # Assert that \1 is a factor of N; tail = \1
    # Assert that tail is square-free (its prime factors all have single multiplicity)
    (
        (?=(xx+?)\3*$)    # \3 = smallest prime factor of tail
        (?=(x+)(\4+$))    # \4 = tail / \3 (implicitly); \5 = tool to make tail = \4
        \5                # tail = \4
        (?!\3*$)          # Assert that tail is no longer divisible by \3, i.e. that that
                          # prime factor was of exactly single multiplicity.
    )*x$
)
# Step 2: Require that the result of repeatedly dividing tail by \1 is 1.
(?=
    (
        # In the following division calculation, we can skip the test for divisibility
        # by \1-1 because it's guaranteed that \2 <= \8. As a result, we did not need to
        # capture \1-1 above, and can use a better-golfed form of the division.
        (?=
            (             # \7 = tail / \1
                (x*)      # \8 = \7-1
                (?=\1\8+$)
                x
            )
            (\7*$)        # \9 = tool to make tail = \7
        )
        \9                # tail = \7
    )*
    x$                    # Require that the end result is 1
)

# Assert that there exists no trio of prime numbers such that N is divisible by the
# smallest and largest prime but not the middle prime.
(?!
    (                          # \10 = a factor of N
        (                      # \11 = a non-factor of N between \10 and \12
            (x+)(?=\12+$)      # \12 = a factor of N smaller than \10
            (x+)               # \13 = tool (with \14) to make tail = \12
        )
        (?!\11+$)
        (x+)                   # \14 = tool to make tail = \11
    )
    \10*(?=\10$)               # tail = \10

    # Assert that \10, \11, and \12 are all prime
    (?!
        (\14\13?)?             # tail = either \10, \11, or \12
        ((xx+)\17+|x?)$
    )
)

এখানে এটি ভেরিয়েবল-দৈর্ঘ্যের লুকের পিছনে পোর্ট করা হয়েছে:

রেজেক্স (ইসিএমএসক্রিপ্ট 2018), 198 195 194 186 182 বাইট

^(?=(x+)(?=\1*$)(?<=^x((?<!^\5*)\3(?<=(^\4+)(x+))(?<=^\5*(x+?x)))*))((?=((x*)(?=\1\8+$)x)(\7*$))\9)*x$(?<!(?!(\14\16?)?((xx+)\12+|x?)$)(?<=^\13+)((x+)(?<!^\15+)((x+)(?<=^\17+)(x+))))

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

# For the purposes of these comments, the input number = N.
^

# Assert that all of N's prime factors are of equal multiplicity
# Step 1: Find Q, the largest square-free factor of N (which will also be the smallest
# factor of N that has all the same prime factors as N) and put it in \1.
(?=
    (x+)(?=\1*$)      # \1 = factor of N; head = \1
    (?<=              # This is evaluated right-to-left, so please read bottom to top.
        ^x
        (
            (?<!^\5*)        # Assert that head is no longer divisible by \6, i.e. that
                             # that prime factor was of exactly single multiplicity.
            \3               # head = \4
            (?<=(^\4+)(x+))  # \4 = head / \5 (implicitly); \3 = tool to make head = \4
            (?<=^\5*(x+?x))  # \5 = smallest prime factor of head
        )*
    )
)
# Step 2: Require that the result of repeatedly dividing tail by \1 is 1.
(
    # In the following division calculation, we can skip the test for divisibility
    # by \1-1 because it's guaranteed that \2 <= \8. As a result, we did not need to
    # capture \1-1 above, and can use a better-golfed form of the division.
    (?=
        (             # \7 = tail / \1
            (x*)      # \8 = \7-1
            (?=\1\8+$)
            x
        )
        (\7*$)        # \9 = tool to make tail = \7
    )
    \9                # tail = \7
)*
x$                    # Require that the end result is 1

# Assert that there exists no trio of prime numbers such that N is divisible by the
# smallest and largest prime but not the middle prime.
# This is evaluated right-to-left, so please read bottom to top, but switch back to
# reading top to bottom at the negative lookahead.
(?<!
    # Assert that \13, \15, and \17 are all prime.
    (?!
        (\14\16?)?           # tail = either \13, \15, or \17
        ((xx+)\12+|x?)$
    )

    (?<=^\13+)
    (                        # tail = \13
        (x+)                 # \14 = tool to make tail = \15
        (?<!^\15+)
        (
            (x+)             # \16 = tool (with \14) to make tail = \17
            (?<=^\17+)(x+)   # \17 = a factor of N smaller than \13
        )                    # \15 = a non-factor of N between \13 and \17
    )                        # \13 = a factor of N
)

আপনি প্রতিস্থাপন করতে পারেন .*$\2সঙ্গে\2^
H.PWiz

যদিও, আমি বিশ্বাস করি এটি বৈধ:^(?=(|(x+)\2*(?=\2$))(((?=(xx+?)\5*$)(?=(x+)(\6+$))\7(?!\5*$))*x$))(?!(((xx+)(?=\10+$)(x+))(?!\9+$)(x+))\8*(?=\8$)(?!(\12\11?)?(xx+)\14+$))((?=((x*)(?=\2\17+$)x)(\16*$))\19)*\3$
এইচপিউইজ


6

জেলি , 13 6 5 বাইট

ÆEt0E

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

এখনও ছাড়িয়ে গেছে ... (ধন্যবাদ এরিক -১ বাইটের জন্য)


ব্যাখ্যা

ÆE     # get a list of prime exponents (noooo long builtin name)
  t0   # remove zeroes on both sides (leading or trailing)
    E  # all remaining elements are equal

œl-> t। IlingE এর আউটপুটে শূন্যগুলি উপস্থিত হওয়ার কোনও কারণ নেই।
এরিক আউটগল্ফার


@ অল্লান এটি 2250 এর জন্য ব্যর্থ হয় ।
ডেনিস

@ ডেনিস ধন্যবাদ, আমি বুঝতে পেরেছিলাম এটি কার্যকর হবে না তবে আমি আশা করছি যে এটি একটি চার বাইট সমাধানের
অনুপ্রেরণা জাগাবে

6

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

রিটার্নস 0 truthy বা falsy জন্য একটি নন-জিরো পূর্ণসংখ্যা জন্য।

f=(n,k=2,j,i)=>n%k?j*(P=d=>k%--d?P(d):d==!i)(k)|j-i|(n>1&&f(n,k+1,j||i)):f(n/k,k,j,-~i)

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

মন্তব্য

f = (                     // f() = recursive function taking:
  n,                      //   n = input
  k = 2,                  //   k = current factor
  j,                      //   j = reference exponent, initially undefined
  i                       //   i = current exponent, undefined each time we start testing
) =>                      //       the next factor
  n % k ?                 // if k is not a divisor of n:
    j * (                 //   ignore the primality of k if j is still undefined
      P = d =>            //     P() = function testing if k is prime:
        k % --d ?         //       decrement d; if d is not a divisor of k:
          P(d)            //         do a recursive call until it is
        :                 //       else:
          d == !i         //         unless i is already defined: d must not be equal to 1
                          //         (if it is: k is the next prime but does not divide n)
    )(k) |                //   initial call to P() with d = k
    j - i | (             //   if both i and j are defined, they must be equal
      n > 1 &&            //   if n is not yet equal to 1,
      f(n, k + 1, j || i) //   go on with k + 1; if j is undefined, set it to i
    )                     //   (otherwise, stop recursion and return what we have)
  :                       // else:
    f(n / k, k, j, -~i)   //   increment the current exponent and go on with n / k

এই পরিবর্তনের দ্বারা ভাঙ্গা ছিল j||iথেকে i। এটি এখন প্রচুর মিথ্যা ইতিবাচক ফল দেয়।
ডেডকোড

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

5

CJam , 30 29 বাইট

{mFz~)-!\__W=,\0=>\-:mp1#W=&}

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

আমার প্রায় উত্তর প্রায় 2 (!) - বছরের বিরতির পরে, তাই এটি সম্ভবত আরও গল্ফ করা যেতে পারে। এটি এমন একটি ব্লক যা পূর্ণসংখ্যা হিসাবে ইনপুট নেয় (পূর্ণসংখ্যার অ্যারেগুলির জন্যও ম্যাপ করা যায়)।

ব্যাখ্যা

{        e# Begin block
 mF      e# Factor input, giving an array of primes and their powers
 z~      e# Transpose and dump, giving an array of primes and an array of powers
 )-      e# Check that the powers are the same: subtract each power from the last element
 !       e# Negate to make sure they're all 0
 \__W=,  e# Get the range from 0 to the largest prime minus one
 \0=>    e# Slice that array so it only includes everything larger than the smallest prime
 \-      e# Remove the original primes from the range array
 :mp     e# Check each element for primality. If the input's primes are consecutive,
         e# this will contain no primes
 1#W=    e# Make sure a "1" is not found
 &       e# If the powers are the same AND primes are consecutive, return 1. Otherwise, 0.
}

5

স্ট্যাক্স , 5 6 বাইট

╣♥qJ╬c

এটি চালান এবং এটি ডিবাগ করুন

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এমন দেখাচ্ছে।

|n    get the exponents of the prime factorization
0:D   trim leading zeroes
:u    array has exactly a single distinct element

সম্পাদনা: এটি কাজ করে না 512। আমি এটিকে কিছু চিন্তাভাবনা করব এবং আশা করছি এটি পরে ঠিক হয়ে যাবে। এটা এখন কাজ করে.


3

স্ট্যাক্স , 9 বাইট

1 সত্যবাদী, 0 টি মিথ্যা

αAG<└\{┬⌠

এটি চালান এবং এটি ডিবাগ করুন

ব্যাখ্যা

|nX0-u%x:^=      # Full Program, unpacked, implicit input
|n               # Exponents of sequential primes in factorization. (eg. 20 -> [2 0 1])
  X              # Save to X register
   0-            # Remove all '0' from array
     u%          # Get unique numbers and get length of array
       x         # Copy back the array saved to X
        :^       # Is it ascending
         =       # Are the two comparisons equal? implicit output

সম্ভবত আরও গল্ফ করা যেতে পারে, তবে এটি শেষ সমাধানে আমি নিখোঁজ হওয়া মামলাগুলি জুড়ে।


3

এমএটিএল , 12 11 10 বাইট

YFtgYsg)Zs

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

অপসারণ-নেতৃস্থানীয়-জিরো অংশের জন্য লুইস মেন্ডোকে ধন্যবাদ। তিনি আরও উল্লেখ করেছিলেন যে সত্যের মানগুলি অদলবদল করার অনুমতি রয়েছে, সুতরাং এটি 0 দেয় returns চ্যালেঞ্জের প্রয়োজনীয়তা এবং অন্যথায় যে কোনও ধনাত্মক মান পূরণ করে এমন সংখ্যার জন্য এটি প্রদান করে।

গ্রোসো মোডো, এটি সিক্যুয়াল প্রাইম ফ্যাক্টেরাইজেশনের এক্সটেনশনগুলি উত্পন্ন করে, শীর্ষস্থানীয় জিরোগুলি সরিয়ে দেয় এবং মানক বিচ্যুতি গণনা করে।


আমি মনে করি 0iYFhdz7 বাইটের জন্য কাজ করে: ক্রমিক ক্রমিককরণের ক্রমাগত পার্থক্য, নন-জিরোগুলির সংখ্যায় একটি 0 প্রেরণ করুন। ফলাফল 1iff ইনপুট প্রয়োজনীয়তা পূরণ করে
লুইস মেন্ডো

@ লুইসেমেন্ডো বিলম্বিত প্রতিক্রিয়ার জন্য দুঃখিত, তবে আপনি পৃথক উত্তর হিসাবে পোস্ট করতে পারেন। এটি অবশ্যই খুব আলাদা।
মিঃ এক্সকোডার

ঠিক আছে, আমি এটিকে উত্তর হিসাবে পোস্ট করেছি
লুইস মেন্ডো 20'18

3

জাভা 10, 223 191 178 176 168 বাইট

n->{var s=new java.util.HashSet();for(int f=1,i=1,x,j;n>1;){for(x=++i,j=2;j<x;)x=x%j++<1?1:x;if(x>1){for(j=0;n%i<1&&n>(f=0);n/=i)j++;if(f<1)s.add(j);}}return s.size();}

রিটার্নস 1truthy, এবং >=2falsey হিসাবে।

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

ব্যাখ্যা:

n->{                   // Method with integer parameter and boolean return-type
  var s=new java.util.HashSet();
                       //  Set to keep track of the prime exponents
  for(int f=1,         //  Prime-flag, starting at 1
          i=1,x,j;     //  Index and temp integers
          n>1;){       //  Loop as long as `n` is still larger than 1
    for(x=++i,         //   Set `x` to `i`, after we've increased `i` by 1 first with `++i`
        j=2;           //   Set `j` to 2 (first prime)
        j<x;)          //   Inner loop as long as `j` is still smaller than `x`
      x=x%j++<1?       //    If `x` is divisible by `j`:
         1             //     Set `x` to 1
        :              //    Else:
         x;            //     Leave `x` unchanged
    if(x>1){           //    If `x` is larger than 1 (if `i` is a prime):
      for(j=0;         //     Use `j` as counter, and set it to 0
          n%i<1        //     If `n` is divisible by `i`:
                       //      And loop as long as `n` is still divisible by `i`,
          &&n>         //      and `n` is larger than 0
              (f=0);   //      (and set `f` to 0 at the same time)
          n/=i)        //       Divide `n` by `i`
        j++;           //       And increase `j` by 1
      if(f<1)          //     If the flag `f` is now/still 0:
        s.add(j);}}    //      Add counter `j` to the Set
  return s.size();}    //  Return the amount of items in the Set
                       //  (1 being true, >=2 being false)

কিছু উদাহরণ ইনপুট:

n=15:

  • পতাকা 1প্রথম প্রথম 2 এর জন্য রয়ে গেছে (কারণ 15 2 দ্বারা বিভাজ্য নয়)।
  • পতাকাটি প্রাইম 3 এ যাওয়ার সাথে 1সাথে চলে যায় 03 যেহেতু 15 3 দ্বারা বিভাজ্য, n5 (15/3 1 ) হয়ে যায় এবং সেটটি হয়ে যায় [] → [1]
  • তারপরে আমরা পরবর্তী প্রাইমটি 5 টি পরীক্ষা করি যেহেতু 5 টি 5 দ্বারা বিভাজ্য, n1 (5/5 1 ) হয়ে যায় এবং সেটটি একই থাকে ( [1] → [1])।
  • এখন n=1, তাই আমরা বাইরের লুপটি বন্ধ করি। সেটটিতে ( [1]) কেবলমাত্র একটি আইটেম রয়েছে, 1সংলগ্ন প্রাইমস 3 এবং 5 উভয় থেকেই, তাই আমরা সত্যটিতে ফিরে আসি।

n=14:

  • পতাকা থেকে যায় 1কাছে 0প্রথম প্রধানমন্ত্রী 2 (কারণ 14 2 দিয়ে বিভাজ্য)। n7 (14/2 1 ) হয়, এবং সেট হয়ে যায়[] → [1]
  • তারপরে আমরা পরবর্তী প্রধান 3 টি পরীক্ষা করে দেখি যেহেতু 7 টি 3 দ্বারা বিভাজ্য নয়, nএকই থাকে এবং সেটটি হয়ে যায় [1] → [1,0]
  • তারপরে আমরা পরবর্তী প্রাইমটি 5 টি পরীক্ষা করে দেখছি যেহেতু 7 টি 5 দ্বারা বিভাজ্য নয়, nএকই থাকে এবং সেটটিও একই থাকে ([1,0] → [1,0] )
  • তারপরে আমরা পরবর্তী প্রাইমটি 7 টি পরীক্ষা করি Since যেহেতু 7টি 7 দ্বারা বিভাজ্য, n1 (7/7 1 ) হয়ে যায় এবং সেটটি একই থাকে ([1,0] → [1,0] )।
  • এখন n=1, তাই আমরা বাইরের লুপটি বন্ধ করি। সেটটিতে ( [1,0]দুটি) দুটি আইটেম রয়েছে, 1নন-সংলগ্ন প্রাইমগুলি 2 এবং 7 এবং 0প্রাইমস 3 এবং 5 এর থেকে, তাই আমরা মিথ্যা ফিরিয়ে দেব।

n=72:

  • পতাকা থেকে যায় 1কাছে 0, প্রথম প্রধানমন্ত্রী 2 কারণ 72 2 (একাধিক বার) দ্বারা বিভাজ্য। সুতরাং n9 (72/2 3 ) হয়, এবং সেট হয়ে যায় [] → [3]
  • তারপরে আমরা পরবর্তী প্রধান 3 টি পরীক্ষা করি Since যেহেতু 9 টি 3 (একাধিক বার) দ্বারা বিভাজ্য, n1 (9/3 2 ) হয়ে যায় এবং সেটটি হয়ে যায় [3] → [3,2]
  • এখন n=1, তাই আমরা বাইরের লুপটি বন্ধ করি। সেটটিতে ( [3,2]দুটি) আইটেম রয়েছে, 3প্রাইম 2 2থেকে এবং প্রাইম 3 থেকে, সুতরাং আমরা মিথ্যা প্রত্যাবর্তন করব।

1
আপনি <2কোনও int মুছে ফেলতে এবং ফিরিয়ে আনতে পারেন (নির্দিষ্ট করুন যে আপনি সত্যের জন্য 1 ফেরান))
wastl

@ ওয়াস্টল আহ, দুটি মানের মধ্যে একটিরই সামঞ্জস্যপূর্ণ হওয়ার নিয়মটি মিস করেছেন। যে ক্ষেত্রে 1truthy এবং 2বা উচ্চতর falsey হয়। ধন্যবাদ।
কেভিন ক্রুইজসেন 20'18

যে আমাকে অনুগ্রহ দিয়েছে তাকে ধন্যবাদ, তবে কেন?
কেভিন ক্রুইজসেন

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

1
@ ডেডকোড আহ, তাই সে কারণেই। আমি ভেবেছিলাম যে কেউ অনুগ্রহ শুরু করেছিলেন, তবে তারা দুর্ঘটনাক্রমে এটির মেয়াদ শেষ হতে দেয় এবং এটি আমার পরিবর্তে এসেছিল। তবুও কিছুটা বিভ্রান্ত কেন আমার উত্তরটি তখন এবং কেন সবচেয়ে বেশি ভোট দেওয়া হয়নি। আমার অবশ্যই বলতে হবে যে আমি আপনার সমস্ত রেগেক্স উত্তর দ্বারা মুগ্ধ। আমি তাদের কয়েকটি দেখেছি এবং প্রতিবার আমি অবাক হয়েছি। বিশেষত যখন আমি পরে একই উত্তরে ফিরে আসি এবং আপনি এটি আরও বেশি লোড করেন। : ডিআই সবেমাত্র লক্ষ্য করেছে যে আমি এই চ্যালেঞ্জটির জন্য একটিও দেখিনি বা এটির উন্নতি করি নি, তাই আমি ঠিক করেছি। আপনি জানেন, আমি আপনার এই উত্তর একটি অনুগ্রহ যোগ করব । :)
কেভিন ক্রুইজসেন

2

জে , 16 বাইট

-8 বাইটের জন্য ফ্রাউনফ্রোগকে বড় ধন্যবাদ!

(=&#+/\=@#])_&q:

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

আমার পুরানো সমাধান:

জে , 24 বাইট

[:(1=[:#@~.{.@I.}.])_&q:

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

ব্যাখ্যা:

_&q: প্রধান উদ্দীপক

{.@I.}.] প্রথম অ-শূন্য উপাদান খুঁজে বের করে নেতৃস্থানীয় শূন্যগুলি সরিয়ে দেয়:

     }.   drop
       ]  from the list of exponents
{.@       as much items as the first of the 
   I.     indices of non-zero elements

1=[:#@~. সমস্ত অবশিষ্ট সংখ্যা সমান হলে পরীক্ষা:

  [:#@~.  finds the length of the list after removing the duplicates
1=        is it 1?


2

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

0iYFhdz

ফলাফলটি 1যদি হয় তবে ইনফুট প্রয়োজনীয়তা পূরণ করে।

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

ব্যাখ্যা

0    % Push 0
i    % Push input number
YF   % Exponents of consecutive prime factors
h    % Concatenate horizontally
d    % Consecutive differences
z    % Number of nonzeros. Implicitly display

2

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

@(x)~any(diff(find(h=histc(factor(x),primes(x))))-1)&h(h>0)==max(h)

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

আমি বিশ্বাস করি এটিই একমাত্র সমাধান যা হিস্টোগ্রাম ব্যবহার করে।

ব্যাখ্যা:

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

তারপরে আমরা চেচ করে থাকি যে হিস্টোগ্রামের সমস্ত অ-শূন্য উপাদানগুলি সর্বোচ্চ উপাদানের সমান। যদি মানগুলি সমান না হয় তবে এর ফলস্বরূপ মান হবে, অন্যথায় এটি সত্যবাদী মানটি ফিরিয়ে দেবে।

যদি এই দুটি ব্লকই সত্যবাদী হয় তবে আমাদের ইনপুটটি পর পরের ধ্রুবক সংখ্যার সংখ্যা!


1

এপিএল (ডায়ালগ প্রসারিত) , 28 বাইট

{f p`↓⍭⍵⋄(1=≢∪p)∧∨/f⍷⍸1⍭⍳⍵}

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

কিভাবে:

{f p`↓⍭⍵⋄(1=≢∪p)∧∨/f⍷⍸1⍭⍳⍵} ⍝ Monadic function, takes an argument ⍵
       ⍭⍵                     ⍝ Prime factors and exponents of ⍵
     `                         split the resulting matrix in 2 vectors
 f p                           assign the factors to f and the powers to p
                               then
                          ⍳⍵    range [1..⍵]
                        1      primality check for each element in the vector
                                where; returns the indices of truthy values
                     f          find the factors; returns a boolean vector
                   ∨/            logical OR reduction
                                logical AND
           (   p)               unique members of the powers
                                tally; returns the number of elements in the vector
            1=                   check if there's only one element




0

পরিষ্কার , 127 বাইট

import StdEnv
@n=[]== $n
?n#j= $n
= @n||j==filter@[hd j..last j]&&any(\p=(prod j)^p==n)[1..n]
$n=[i\\i<-[2..n-1]|n/i*i==n&& @i]

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

গুণমান এবং প্রাথমিকতা পরীক্ষা করতে ? :: Int -> Boolব্যবহার করে ফাংশনটি সংজ্ঞায়িত করে ।$ :: Int -> [Int]@ :: Int -> Bool


0

এপিএল (এনএআরএস) 41 টি চর, 82 বাইট

{(1=≢∪+/¨{v=⍵⊃v}¨⍳≢v)∧(1↓w)≡¯1↓1πw←∪v←π⍵}

প্রধান উপাদানগুলির তালিকায় argument π⍵} আর্গুমেন্টের ফাংশন ফ্যাক্টেরাইজেশন ((যদি কোনও প্রধান আরও সময় উপস্থিত হয় তবে পুনরাবৃত্তি করুন);
{1π⍵ হ'ল ফাংশনটি পরবর্তী প্রাইম (নোট করুন যে এই ক্ষেত্রে এর যুক্তিটি স্কেলার নয় তবে পূর্ণসংখ্যার এক অ্যারে)) পরীক্ষা:

  h←{(1=≢∪+/¨{v=⍵⊃v}¨⍳≢v)∧(1↓w)≡¯1↓1πw←∪v←π⍵}
  (2..30)/⍨h¨2..30
2 3 4 5 6 7 8 9 11 13 15 16 17 19 23 25 27 29 30 
  h¨27000 456533 72 10000000
1 1 0 0 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.