প্রদত্ত কারণগুলির একটি পণ্য হিসাবে সর্বনিম্ন পূর্ণসংখ্যা


17

সম্প্রতি প্রাইম-/ প্রাইম ফ্যাক্টরীকরণ-সম্পর্কিত চ্যালেঞ্জগুলি অনেক হয়েছে, তাই আমি ভেবেছিলাম যে অন্যভাবে যেতে আগ্রহী।

প্রদত্ত:

  • একটি ধনাত্মক পূর্ণসংখ্যার n, এবং
  • ইতিবাচক পূর্ণসংখ্যার একটি খালি খালি তালিকা f

একটি পূর্ণ প্রোগ্রাম বা পূর্ণসংখ্যা ক্ষুদ্রতম এটি একটি ফাংশন লিখতে iযেমন যে i >= nএবং iউপাদানের নন-নেগেটিভ, পূর্ণসংখ্যা ক্ষমতা একটি পণ্য f

উদাহরণ:

  • ধরুন n = 11, f = [2, 3, 5]

    প্রথম কয়েকটি পণ্য হ'ল:

    1   = 2^0 * 3^0 * 5^0
    2   = 2^1 * 3^0 * 5^0
    3   = 2^0 * 3^1 * 5^0
    5   = 2^0 * 3^0 * 5^1
    4   = 2^2 * 3^0 * 5^0
    6   = 2^1 * 3^1 * 5^0
    10  = 2^1 * 3^0 * 5^1
    9   = 2^0 * 3^2 * 5^0
    15  = 2^0 * 3^1 * 5^1
    25  = 2^0 * 3^0 * 5^2
    8   = 2^3 * 3^0 * 5^0
    12  = 2^2 * 3^1 * 5^0 => smallest greater than (or equal to) 11, so we output it.
    20  = 2^2 * 3^0 * 5^1
    18  = 2^1 * 3^2 * 5^0
    30  = 2^1 * 3^1 * 5^1
    50  = 2^1 * 3^0 * 5^2
    27  = 2^0 * 3^3 * 5^0
    45  = 2^0 * 3^2 * 5^1
    75  = 2^0 * 3^1 * 5^2
    125 = 2^0 * 3^0 * 5^3
    
  • ধরুন n=14, f=[9, 10, 7]

    আবার প্রথম কয়েকটি পণ্য:

    1 = 7^0 * 9^0 * 10^0
    7 = 7^1 * 9^0 * 10^0
    9 = 7^0 * 9^1 * 10^0
    10 = 7^0 * 9^0 * 10^1
    49 = 7^2 * 9^0 * 10^0  => smallest greater than (or equal to) 14, so we output it.
    63 = 7^1 * 9^1 * 10^0
    70 = 7^1 * 9^0 * 10^1
    81 = 7^0 * 9^2 * 10^0
    90 = 7^0 * 9^1 * 10^1
    100 = 7^0 * 9^0 * 10^2
    

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

n, f -> output
10, [2, 3, 5]              -> 10
17, [3, 7]                 -> 21
61, [3,5,2,7]              -> 63
23, [2]                    -> 32
23, [3]                    -> 27
23, [2, 3]                 -> 24
31, [3]                    -> 81
93, [2,2,3]                -> 96
91, [2,4,6]                -> 96
1,  [2,3,5,7,11,13,17,19]  -> 1
151, [20,9,11]             -> 180
11616, [23,32]             -> 12167
11616, [23,32,2,3]         -> 11664 = 2^4 * 3^6
5050, [3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210] -> 5103 = 3^6 * 7
12532159, [57, 34, 12, 21] -> 14183424 = 12^5 * 57

বিধি

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

উত্তর:



7

ওল্ফ্রাম ভাষা (গণিত) , 68 65 62 61 বাইট

If[#^#2<=1,1~Max~-Log@#2,Min[#0[#,#2-1,##4],#0[#/#3,##2]#3]]&

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

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

হিসাবে ইনপুট নেয় [n,k,f1,f2,f3,...,fk](যেমন,[11,3,2,3,5] ) : প্রথম মানটি লক্ষ্য n, দ্বিতীয়টি কারণগুলির সংখ্যা এবং সমস্ত ফ্র্যাক্টর অনুসরণ করে।

অন্যান্য সংখ্যা-তত্ত্বের চ্যালেঞ্জগুলি সম্প্রতি সমস্ত অভিনব বিল্ট-ইনগুলিতে সংযুক্ত হয়েছে (খুব কমপক্ষে, তারা ব্যবহার করেছিল FactorInteger) তাই আমি ভেবেছিলাম যে আমি এমন কিছু চেষ্টা করব যা কেবলমাত্র প্রাথমিক সরঞ্জামগুলি ব্যবহার করে used এই সমাধানটি মূলত বলে যে nউপাদানগুলির পণ্য হিসাবে লেখার জন্য, আমরা হয় প্রথম ফ্যাক্টরটি ব্যবহার করি f1(এবং পুনরুক্তি পেতে পারি)n/f1 , তারপরে গুণ করে)f1 ) বা না (এবং কারণগুলির একটি সংক্ষিপ্ত তালিকায় পুনরাবৃত্তি), তারপরে মিনিটটি নেওয়া take

লক্ষ্যটি 1 এর চেয়ে কম হয় বা যখন কারণগুলির সংখ্যা 0 হয় তখন পুনরাবৃত্তিটি তলিয়ে যায় এবং আমরা #^#2<=1একবারে এটি যাচাই করি , এবং তারপরে প্রথম ক্ষেত্রে এবং Infinityপরবর্তীটিতে 1 জেনারেট করি 1~Max~-Log@#2

ফাংশনটি আপনাকে পুরোপুরি সতর্কতা দেয় (তবে এখনও কাজ করে) যদি আপনি এটি চালনা না করেন Quiet, কারণ এটি অবশেষে এমন ক্ষেত্রে পুনরাবৃত্তি করে যেখানে #3অস্তিত্বহীন দ্বিতীয় শাখাটি Ifদু: খিত করে।


-3 বাইট: ইনপুট হিসাবে ফ্যাক্টর সংখ্যা গ্রহণ।

-3 বাইটস @ এনজেনিসিসকে ধন্যবাদ: ব্যবহার করে

-1 বাইট, এবং কোন অস্পষ্টতা নেই: #^#2চেক।


2
খুব সুন্দর! ট্রির উপর বাইট সংরক্ষণ করুন [১ ^ {##}] `এর চেয়ে একটি বাইট কম । 3-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also, Length@{##}
নেজেনিসিস

টিআইও পছন্দ করে না এমন অপটিমাইজেশন ব্যবহার সম্পর্কে আমি কেমন অনুভব করছি তা সম্পর্কে আমি পুরোপুরি নিশ্চিত নই, তবে নিশ্চিত, আমি এটি যুক্ত করব। আর #2চেয়ে আরও খাটো Tr[1^{##}]। :)
মিশা লাভরভ

1
আমি মনে করি আপনি Quietআপনার মূল কোডে ফাঁসানো উচিত his এই উত্তরটি অনেক বেশি ভুল বার্তা দেয়। কমপক্ষে ওপিকে জিজ্ঞাসা করুন যদি সে এটি ঠিক আছে
J42161217

2
এটি অনেকটা একই বলে মনে হচ্ছে যে এসটিডিআরআর উপেক্ষা করা অন্য কোনও ভাষায় হবে, যা গ্রহণযোগ্য অনুশীলন
মিশা লাভরভ

2
সমস্যা একটি বাগ উপস্থিত হতে পারে। আমি এটা ঠিক করার চেষ্টা করব।
ডেনিস

6

পাইথন 2 , 91 88 84 বাইট

f=lambda n,l:n<2or any(n%x<1and f(n/x,l)for x in l)
g=lambda n,l:n*f(n,l)or g(n+1,l)

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

ফাংশন fচেক যাও recursively যদি nউপাদানের ক্ষমতা একটি পণ্য l, gশুধু একটি পুনরাবৃত্তির নিয়ন্ত্রণ করতে মোড়কের হয়



4

জেলি , 13 বাইট

L⁹ṗ’⁸*P€ḟ⁹Ḷ¤Ṃ

একটি ডায়াডিক লিঙ্ক f, বাম এবং সংখ্যায়, nডানদিকে তালিকাটি নিচ্ছে যা একটি নম্বর দেয়।

এটি অনলাইন চেষ্টা করুন! Golfily অদক্ষ - উচ্চতর সহ ইনপুট জন্য টাইম আউট হবেnএবং / অথবা আরf

কিভাবে?

আমরা জানি যে ব্যক্তির শক্তিগুলি (কঠোরভাবে ইতিবাচক) কারণগুলি কখনই অতিক্রম করার প্রয়োজন হবে না n-1
... সুতরাং আসুন আমরা সমস্ত সম্ভাব্য উপায়গুলি পরীক্ষা করে দেখি!

L⁹ṗ’⁸*P€ḟ⁹Ḷ¤Ṃ - Link: list, f; number, n
 ⁹            - chain's right argument, n
L             - length of f
  ṗ           - Cartesian power  ...e.g.: len(f)=2; n=3 -> [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]
   ’          - decrement (vectorises)
    ⁸         - chain's left argument, f
     *        - exponentiate (vectorises) - that is [f1^a, f2^b, ...] for each [a, b, ...] in the list formed from the Cartesian power
      P€      - product for €ach - that is f1^a * f2^b * ... for each [a, b, ...] in the list formed from the Cartesian power
           ¤  - nilad followed by link(s) as a nilad:
         ⁹    -   chain's right argument, n
          Ḷ   -   lowered range -> [0,1,2,3,...,n-1]
        ḟ     - filter discard - that is remove values less than n
            Ṃ - minimum

2

রেটিনা , 76 বাইট

\d+
$*
1+;
$&$&
{+`;(1+)(\1)*(?=;.*\b\1\b)
;1$#2$*1
}`(1+);11+;
1$1;1$1;
\G1

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি ধীরতম পরীক্ষার কেসগুলি বাদ দেয় তবে এটি এখনও কিছুটা ধীর গতির, সুতরাং @ ডেনিসের সার্ভারকে হাতুড়ি না দেওয়ার চেষ্টা করুন।



2

গণিত, 85 বাইট

Min@Select[Flatten[1##&@@(s^#)&/@Tuples[0~Range~⌈Log[Min[s=#],d=#2]⌉,#3]],#>=d&]&

ইনপুট

[f তালিকা চ}, এন, এফ এর উপাদান সংখ্যা]
[{57, 34, 12, 21}, 12532159, 4]


{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]
নেজিনিসিস

@ngenisis প্রতীকটি কী প্রদর্শিত হয় না? আপনি কি পরিবর্তে একটি টিআইও লিঙ্ক তৈরি করতে পারেন?
J42161217

"গণিত" এবং "টিআইও" একই পোস্টে ব্যবহৃত হয়েছিল
সেদিনটি আমি কখনই দেখিনি ভেবেছিলেন কখনও

@ জেনি_ম্যাটি এটি U+F4A1, দীর্ঘ নাম \[Function]
নেজেনিসিস

ব্যবহার 0~Range~9খুব রক্ষণশীল মনে হয়। করা উচিত g[{2,3,5},1001]সত্যিই উপর লাফালাফি 1024এবং রিটার্ন 1080? এটি কোনও বিশেষভাবে বড় ইনপুট নয়।
মিশা লাভরভ 21

2

জাপট , 10 বাইট

_k e!øV}aU

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

দোভাষীকে চিরতরে চালিয়ে যাওয়ার জন্য নকশাকৃত পুনরাবৃত্তির সীমাবদ্ধতার কারণে শেষ পরীক্ষার ক্ষেত্রে কাজ করে না (যদিও এখানে এক ঘন্টার জন্য আমার ব্রাউজারটি হিমশীতল করা হয়েছে তাই এখানে তেমন কিছু করেনি ...)

ব্যাখ্যা

_k e!øV}aU    Implicit: U = input integer, V = array of factors
_      }aU    Starting at U, find the next integer Z where
 k              the factors of Z
   e            are such that every factor
    !øV         is contained in V (e!øV -> eX{VøX}, where VøX means "V contains X").
              Implicit: output result of last expression


2

Haskell, , 46 বাইট

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

(#1)
(l#x)n|x<n=minimum[(l#(x*e))n|e<-l]|1>0=x

1

গণিত, 73 বাইট

1±_=1>0;n_±f_:=Or@@(#∣n&&n/#±f&/@f);n_·f_:=NestWhile[#+1&,n,!#±f&]

মূলত রডের পাইথন উত্তরের একটি বন্দর । দুটি বাইনারি অপারেটর ±এবং ·n±fফেরৎ Trueযদি nউপাদানের একটি পণ্য fএবং Falseঅন্যথায়।n·fসবচেয়ে ছোট পূর্ণসংখ্যা দেয়i । কেউ যদি বিভাজন পরীক্ষাটি মুছে ফেলার উপায় খুঁজে বের করতে পারে তবে আমি আইএসও 8859-1 এনকোডিং ব্যবহার করে 10 বাইট সংরক্ষণ করতে পারি।

ব্যাখ্যা

1±_=1>0;                         (* If the first argument is 1, ± gives True. *)
n_±f_:=Or@@(#∣n&&n/#±f&/@f);     (* Recursively defines ±. *)
                                 (* For each element of f, check to see if it divides n. *)
                                 (* For each element # that does, check if n/# is a product of elements of f. *)
n_·f_:=NestWhile[#+1&,n,!#±f&]   (* Starting with n, keep incrementing until we find an i that satisfies i±f. *)

1

আর , 52 বাইট

function(n,f)min((y=(x=outer(f,0:n,"^"))%o%x)[y>=n])

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

এটি 3 সপ্তাহ হয়েছে, তাই আমি ভেবেছিলাম শেষ পর্যন্ত আমার নিজের সমাধান পোস্ট করব। এটি একটি নিষ্ঠুর শক্তি পদ্ধতির।

তবে একটি বিল্টিন রয়েছে:

আর , 5 বাইট

nextn

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

আর ডক্স থেকে:

nextnক্ষুদ্রতম পূর্ণসংখ্যা প্রদান করে, এর চেয়ে বড় বা সমান n, যা এতে থাকা মানগুলির ক্ষমতার পণ্য হিসাবে প্রাপ্ত হতে পারে factorsnextnশূন্য-প্যাডের উপযুক্ত দৈর্ঘ্যের সন্ধান করার জন্য যুক্তিটি তৈরি করা fftহয়েছে যাতে ট্রান্সফর্মটি দ্রুত গণনা করা হয়। factorsএটির জন্য ডিফল্ট মান ।

কিছু টেস্টিং বাস্তবায়নে একটি ত্রুটি প্রকাশ করেছিল, তবে উপরের টিআইও লিঙ্কটি দেখায়।

nextn(91,c(2,6))96 ফেরত দেওয়া উচিত, তবে পরিবর্তে 128 প্রদান করা উচিত এটি স্পষ্টতই তখন ঘটে যখন factorsসমস্ত অপরের সাথে তুলনামূলকভাবে প্রধান না হয়। প্রকৃতপক্ষে, এর অন্তর্নিহিত সি কোডটি প্রকাশ করে যে nextnলোভজনকভাবে প্রতিটি পৌঁছানোর factorআগ পর্যন্ত বিভক্ত করার চেষ্টা করে 1:

static Rboolean ok_n(int n, int *f, int nf)
{
    int i;
    for (i = 0; i < nf; i++) {
    while(n % f[i] == 0) {
        if ((n = n / f[i]) == 1)
        return TRUE;
    }
    }
    return n == 1;
}

static int nextn0(int n, int *f, int nf) { while(!ok_n(n, f, nf)) n++; return n; }

ক্রমহ্রাসমান ক্রমে ইনপুট নিয়ে এটি সমাধান করা যেতে পারে।


1

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

সংরক্ষিত 3 বাইট @ ড্যানিয়েল ইন্ডিকে ধন্যবাদ

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (n)(a)

n=>m=a=>(g=k=>k<n?a.map(x=>g(k*x)):k>m?0:m=k)(1)|m

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

কিভাবে?

n => a => (                 // given n and a
  g = k =>                  // g = recursive function taking k
    k < n ?                 // if k is less than n:
      a.map(x => g(k * x))  //   recursive calls to g with x * k for each x in a
    :                       // else:
      k > m ?               //   if k is greater than m and m is not set to NaN:
        0                   //     ignore this result
      :                     //   else:
        m = k               //     update m to k
  )(                        // initial call to g with:
    1,                      //   k = 1
    m = +a                  //   m = either NaN or the single integer contained in a
  ) | m                     // return m

n => এম = এ => (জি = কে => কে <এন? এ.ম্যাপ (এক্স => জি (কে * এক্স)): কে> এম? 0: এম = কে) (1) | মিমি = ফাংশন সর্বদা প্রথম রানে মিথ্যা উত্পাদন করে, সুতরাং এটি মূলত + এ দেওয়ার মতোই, এখন এটি 51 বাইট
ড্যানিয়েলইন্ডি

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