মূল কারণগুলির যোগফল


27

2013 এর প্রধান কারণ রয়েছে 3*11*61। 2014 উত্তর দিবেন হয়েছে 2*19*53। একটি উত্সাহব্যঞ্জক এই factorizations সংক্রান্ত সম্পত্তি সেখানে 2013 এবং 2014 একই সংখ্যক যে সমষ্টি factorizations মধ্যে স্বতন্ত্র মৌলিক অস্তিত্ব যে: 11+61=19+53=72

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা এর ইনপুট হিসাবে 1 এর চেয়ে বেশি দুটি ধনাত্মক পূর্ণসংখ্যার হিসাবে গ্রহণ করে এবং যদি দ্বিতীয় সংখ্যায় নির্বাচিত মৌলিক সংখ্যার সমতুল্য একটি সংখ্যার নির্বাচিত মৌলিক উপাদানগুলির সমষ্টি এবং একটি অন্যথায় মিথ্যা মান।


ব্যাখ্যা

  • দুটিরও বেশি প্রধান উপাদান ব্যবহার করা যেতে পারে। সংখ্যার মূল উপাদানগুলির সমস্তটি যোগফল ব্যবহার করার প্রয়োজন হয় না। দুটি সংখ্যা থেকে ব্যবহৃত প্রাইমের সংখ্যা সমান হওয়া প্রয়োজন নয়।
  • এমনকি যদি কোনও সংখ্যার গুণককরণের ক্ষেত্রে কোনও মৌলিক 1 এর চেয়ে বেশি শক্তিতে উত্থাপিত হয় তবে এটি কেবল সংখ্যার জন্য প্রাইমের যোগফলে একবার ব্যবহার করা যেতে পারে।
  • 1 প্রধান নয়।
  • উভয় ইনপুট সংখ্যা কম হবে 2^32-1

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

5,6
    5=5
    6=2*3
    5=2+3
==>True

2013,2014
    2013=3*11*61
    2014=2*19*53
    11+61=19+53
==>True

8,15
    8=2^3
    15=3*5
    No possible sum
==>False

21,25
    21=3*7
    25=5^2
    No possible sum (can't do 3+7=5+5 because of exponent)
==>False

এটি কোড গল্ফ। স্ট্যান্ডার্ড বিধি প্রয়োগ। বাইটস মধ্যে সংক্ষিপ্ত কোড।


6
আমি এর মতো চ্যালেঞ্জ পছন্দ করি তবে গল্ফিংয়ের ভাষাগুলির জন্য এটি বিল্ট-ইনগুলির একটি শৃঙ্খল হবে: ফ্যাক্টর, ইউনিফিকেশন, সাবসেট, অঙ্ক, ওভারল্যাপ।
xnor

আমরা কি দ্বি-আইটেমের অ্যারে হিসাবে ইনপুট নিতে পারি?
ইটিএইচ প্রডাকশনগুলি

ডিফল্টভাবে, হ্যাঁ
lirtosiast

১৪ (২ *)) এবং ২১ (৩ *)) কী হবে true, তারা কী ভাগ করে নিচ্ছে 7?
সাইমন ফারসবার্গ

@SimonForsbergMcFeely হ্যাঁ
Arcturus

উত্তর:


10

জুলিয়া, 95 93 বাইট

g(x)=reduce(vcat,map(p->map(sum,p),partitions([keys(factor(x))...])))
f(a,b)=g(a)∩g(b)!=[]

প্রাথমিক ফাংশন fএবং এটি একটি সাহায্যকারী ফাংশন কল g

Ungolfed:

function g(x::Integer)
    # Find the sum of each combination of prime factors of the input
    return reduce(vcat, map(p -> map(sum, p), partitions([keys(factor(x))...])))
end

function f(a::Integer, b::Integer)
    # Determine whether there's a nonzero intersection of the factor
    # sums of a and b
    return !isempty(g(a)  g(b))
end

দার্ট আলেফাল্ফাকে ধন্যবাদ 2 বাইট সংরক্ষণ করা


3
আমি খেয়াল করেছিলাম এটিকে নিম্নমানের করা হয়েছিল। আমি কি কিছু উপেক্ষা করেছি? যদি এটি ভুল হয় তবে আমি এটিকে সংশোধন করতে পেরে খুশি হব, তবে এটি যেমন দাঁড়ায় এটি আমার পক্ষে ভাল কাজ করে এবং সমস্ত পরীক্ষার কেস পাস করে।
অ্যালেক্স এ।

আমি মনে করি এর map(p->mapচেয়ে কম (m=map)(p->m
আলেফাল্ফা

@ দার্থ আলেফাল্ফ ভাল কল, ধন্যবাদ।
অ্যালেক্স এ

7

পাইথ, 11 বাইট

t@FmsMy{PdQ

ফর্ম ইনপুট 30,7

t@FmsMy{PdQ     implicit: Q=input tuple
      y         powerset of
       {        unique elements of
        Pd      prime factorizations of d
    sM          Map sum over each element of the powerset
    sMy{Pd      lambda d: all sums of unique prime factors of d
   m      Q     Map over Q. Produces a two-element list.
 @F             Fold list intersection
t               Remove first element, which is a 0.
                If no other common sums, the remaining empty list is falsy.

1
এটি এখন অন্য পাইথ উত্তরের অনুরূপ, একটি সরানো চিঠি বাদে;)
ETH প্রোডাকশনগুলি

মাল্টেসেন তাদের ঠিক করার আগে @ETH প্রোডাকশনগুলি আমি উত্তর দিয়েছি; তাই আমি এটি রাখব।
lirtosiast

7

পাইথ - 17 12 11 বাইট

আমার উত্তর স্থির করে এবং একটি বাইট সংরক্ষণ করার জন্য @ ফ্রাইআমএইটিজিমনকে ধন্যবাদ জানাই।

@FmsMty{PdQ

টেস্ট স্যুট


আমার মনে হয় tyকাজগুলি ব্যবহার করে একটি বিদায় বাঁচাবে?
FryAmTheEggman

@ ফ্রাইএইমডিজম্যান ধন্যবাদ!
মালটিসেন

17
@ মাল্টেসেন আপনি "টাই" বলার সুবর্ণ সুযোগটি হাতছাড়া করেছেন
আন্ডারগ্রাউন্ডোমোরিয়েল

4

হাস্কেল, 115 106 বাইট

import Data.Numbers.Primes
import Data.List
p=map sum.tail.subsequences.nub.primeFactors
a#b=p a/=p a\\p b

ব্যবহারের উদাহরণ: 2013 # 2014-> True

pতার যুক্তিগুলির সমস্ত মৌলিক কারণগুলির একটি তালিকা তৈরি করে, সদৃশগুলি সরিয়ে দেয়, সমস্ত অনুচ্ছেদের একটি তালিকা তৈরি করে, প্রথমটি ড্রপ করে (যা সর্বদা খালি তালিকা) এবং অবশেষে উপসংহারগুলি যোগ করে ms পার্থক্যের সমান নয় #কিনা তা পরীক্ষা p aকরে p a \\ p b। সমান না হলে তাদের কমপক্ষে একটি সাধারণ উপাদান রয়েছে।


3

জাপট, 25 বাইট

[UV]=N®k â à mx};Ud@J<VbX

আউটপুট trueবা falseএটি অনলাইন চেষ্টা করুন!

অবহেলিত এবং ব্যাখ্যা

[UV]=N®   k â à mx};Ud@ J<VbX
[UV]=NmZ{Zk â à mx};UdX{J<VbX

          // Implicit: N = list of inputs
[UV]=N    // Set variables U and V to the first to items in N,
mZ{    }  // with each item Z mapped to:
Zk        //  Generate list of Z's factors.
â         //  Keep only the unique items.
à         //  Generate all combinations.
mx        //  Sum each combination.
UdX{      // Check if any item X in U fulfills this condition:
J<VbX     //  -1 is less than V.indexOf(X).
          // Implicit: output last expression

অতিরিক্ত বাইটের জন্য, সময়ের জটিলতা থাকার অতিরিক্ত সুবিধা সহ আপনি উভয় ইনপুটগুলির মধ্যে ফ্যাক্টরাইজ-অনন্য-সম্মিলন-যোগ কোডটি বিভক্ত করতে পারেন O(O(25-byte version)^2):

Uk â à mx d@J<Vk â à mx bX

3

সিজেম, 23 বাইট

q~{mf_&0a\{1$f++}/}/&0-

এটি এখানে পরীক্ষা করুন।

সত্যবাদী মান হ'ল সমস্ত সাধারণ অঙ্কগুলি একত্রিত হবে, মিথ্যা মানটি খালি স্ট্রিং।

ব্যাখ্যা

q~     e# Read and evaluate input.
{      e# For each of the two numbers...
  mf   e# Get the prime factors.
  _&   e# Remove duplicates.
  0a\  e# Put an array containing a 0 below to initialise the list of possible sums.
  {    e# For each prime factor...
    1$ e#   Make a copy of the available sums so far.
    f+ e#   Add the current factor to each of them.
    +  e#   Combine with the list of sums without that factor.
  }/
}/
&      e# Set intersection between the two lists of sums.
0-     e# Remove the 0 which is always in the intersection.

3

ব্র্যাচল্যাগ , 10 9 বাইট

{ḋd⊇+ℕ₁}ᵛ

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

প্রাকটিকটি [the sum, the sum]উপস্থিত থাকলে ফিরে আসতে সফল হয় এবং যোগফল না থাকলে ব্যর্থ হয়।

{            Start of inline predicate.
 ḋ           The prime factors of the input,
  d          with duplicates removed.
   ⊇         Some subset of the unique prime factors
    +ℕ₁      has a sum greater than 0 which is output.
       }ᵛ    The predicate can have the same output for both elements of the input.

-1 বাইট ধন্যবাদ ফ্যাটালাইজকে (ব্র্যাচল্যাগের স্রষ্টা) আমাকে স্মরণ করিয়ে দিয়ে যে যাচাই मेटाটা-প্রিকেট বিদ্যমান।


1
আপনি একটি বাইট সংরক্ষণ করার ᵛ - verifyপরিবর্তে ব্যবহার করতে পারেন ˢ=
ফ্যাটালাইজ করুন

2

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

2:"iYfutn2w^1-:B!Y*]!=z

বর্তমান প্রকাশ, 2.0.2 ব্যবহার করে যা এই চ্যালেঞ্জের চেয়ে আগের।

সংখ্যা দুটি পৃথক ইনপুট হিসাবে সরবরাহ করা হয়। আউটপুট হয় 0বা 1

উদাহরণ

>> matl 2:"iYfutn2w^1-:B!Y*]!=z
> 2013
> 2014
1

ব্যাখ্যা

2:           % vector of two numbers, to generate two iterations
"            % for loop
  i          % input number                                                 
  Yfu        % get prime factors without repetitions
  tn         % duplicate and get number of elements in array N 
  2w^1-:     % numbers from 1 to 2^N                                        
  B!Y*       % convert to binary, transpose and matrix multiply to produce all sums
]            % end                                                      
!=z          % true if any value is equal to any other

2

গণিত, 58 বাইট

Tr/@Rest@Subsets[#&@@@FactorInteger@#]&/@IntersectingQ@##&

ব্যাখ্যা:

এটি একটি বেনামে ফাংশন।

প্রথমে IntersectingQদুটি তালিকা ছেদ করে কিনা তা পরীক্ষা করে দেখুন। তবে ইনপুটগুলি তালিকার পরিবর্তে সংখ্যা, তাই এটি মূল্যহীন remains উদাহরণস্বরূপ, যদি ইনপুট হয় 2013এবং 2014, তবে IntersectingQ@##&ফিরে আসে IntersectingQ[2013, 2014]

Tr/@Rest@Subsets[#&@@@FactorInteger@#]&অপর একটি বেনাম ফাংশন যা পূর্ণসংখ্যা নেয়, পুনরাবৃত্তি ছাড়াই তার প্রধান কারণগুলির একটি তালিকা পায়, শক্তি সেট নেয়, খালি সেটটি সরিয়ে দেয় এবং তারপরে প্রতিটি সেটের যোগফল গ্রহণ করে। সুতরাং Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]ফিরে {3, 11, 61, 14, 64, 72, 75}

তারপরে Tr/@Rest@Subsets[#&@@@FactorInteger@#]&অভিব্যক্তিটির উপর ম্যাপ করুন IntersectingQ[2013, 2014]Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]এবং Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2014]]তালিকাগুলি, যাতে আমরা এবার সংগ্রহের ফলাফলটি পেতে পারি।


IntersectingQপ্রথম কল করা আশ্চর্যজনক! :)
মার্টিন এন্ডার

আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
লিন

2

পারি / জিপি , 98 বাইট

ফ্যাক্টর, গ্র্যাব প্রাইমস ( [,1]), অজানা সাবটাইটস, যোগফল এবং ইউনিকের উপর লুপ করুন, তারপরে দুটি সংখ্যার জন্য এর ফলাফলটি ছেদ করুন। প্রত্যাবর্তিত মান হ'ল ছেদগুলির সংখ্যা, যা সত্য হয় যদি না তারা 0 হয়।

f(n,v=factor(n)[,1])=Set(vector(2^#v-1,i,vecsum(vecextract(v,i))))
g(m,n)=#setintersect(f(m),f(n))

2

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

-5 এনএনজি ধন্যবাদ

বেনামে টাসিট ইনফিক্স ফাংশন।

1<≢⍤∩⍥(∊0+⍀.,∪⍤⍭)

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

⍥{} উভয় যুক্তিতে নিম্নলিখিত বেনামী ফাংশন প্রয়োগ করুন:

 মৌলিক উত্পাদক

 তারপর

 যারা অনন্য

0+⍀., প্রতিটি ফ্যাক্টরের সাথে শূন্যের সংযোজন টেবিল হ্রাস

ε nlist (চেপ্টা)

 ছেদ

 তারপর

 যারা ট্যালি

1< একটির বেশি আছে কি? (এক কারণ হিসাবে কোন কারণের যোগফল)


: ব্যবহার করে শুধুমাত্র সঠিক dyalog থেকে অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে p+.×⊤1↓⍳2*≢p←> -1↓∊(⊢,+)/0,⍨
ngn

এমনকি খাটো:1↓∊∘.+/0,¨
ngn

যা 1↓∊0∘.+.,একটি ইনউটার পণ্য - আপনি এটি কতবার দেখেন :)
এনজিএন

যদি আমি সঠিকভাবে বুঝতে পারি তবে এটিও কাজ করা উচিত:1<∘≢∩⍥{∊0∘.+.,∪⍭⍵}
ngn

ধন্যবাদ সম্পন্ন.
অ্যাডম

2

05 এ বি 1 ই , 10 8 বাইট

f€æO`å¦à

-2 ধন্যবাদ বাইট @Emigna

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

ব্যাখ্যা:

f         # Get all distinct prime factors of both values in the (implicit) input-list
          #  i.e. [2013,2014] → [[3,11,61],[2,19,53]]
 ۾       # Get the powerset for each
          #  → [[[],[3],[11],[3,11],[61],[3,61],[11,61],[3,11,61]],
          #     [[],[2],[19],[2,19],[53],[2,53],[19,53],[2,19,53]]]
   O      # Sum each inner-most list
          #  → [[0,3,11,14,61,64,72,75],[0,2,19,21,53,55,72,74]]
    `     # Push both lists to the stack
     å    # Check for each value in the second list if it's present in the first list
          #  → [1,0,0,0,0,0,1,0]
      ¦   # Remove the first item (since the powerset included empty leading lists)
          #  → [0,0,0,0,0,1,0]
       à  # Check if any are truthy by taking the maximum (which is output implicitly)
          #  → 1

1
f€æO`å¦à8 এর জন্য কাজ করা উচিত
এমিনিগা


1

পাইথন 3 , 206 বাইট

এটি একটি ল্যাম্বডা ফাংশন (এম), যা ২ টি সংখ্যার মধ্যে নেয় এবং সেগুলির মধ্যে সাধারণ উপাদানগুলির যে কোনও যোগফল রয়েছে returns পাইথনে এটি খালি নয়, এবং খালি হলে একটি মিথ্যা মান।

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

q=__import__('itertools').permutations
def p(n):
 i,s=2,set()
 while~-n:
  if n%i:i+=1
  else:n//=i;s|={i}
 return s
s=lambda f:{sum(i)for l in range(1,len(f)+1)for i in q(f,l)}
m=lambda a,b:s(p(a))&s(p(b))

মন্তব্যগুলি ব্যবহার করে দ্রুত ব্যাখ্যা:

#Alias for permutations function
q=__import__('itertools').permutations
#Returns set of prime factors of n, including n, if prime
def p(n):
 i,s=2,set()
 while~-n:
  if n%i:i+=1
  else:n//=i;s|={i}
 return s
#Returns all possible sums of 2 or more elements in the given set
s=lambda f:{sum(i)for l in range(1,len(f)+1)for i in q(f,l)}
#Returns any shared possible sums of prime factors of a and b (the intersection of the sets)
m=lambda a,b:s(p(a))&s(p(b))

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


এটি প্রথম পরীক্ষার ক্ষেত্রে কাজ করে না 5,6, যেহেতু এটি প্রাথমিক ইনপুটগুলি পরিচালনা করে না
জো কিং

@ জোকিং তা ধরার জন্য ধন্যবাদ উত্তর আপডেট করা হয়েছে।
সেনক্স 13

1

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

{⍬≢↑∩/+/¨¨{⍵∼⊂⍬}¨{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}¨∪¨π¨⍵}

এখানে its তার যুক্তিতে কারণগুলির অ্যারের সন্ধান করবে;

{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵} 

সমস্ত ফাংশনটি খুঁজে পাওয়া ফাংশনটি হবে ... আমাকে বলতে হবে যে এটি মনে হয় ⍵ rator rator rator rator rator rator rator rator rator rator rator rator rator each each (প্রতিটি বামের জন্য) এবং ¨ (প্রতিটি ডানদিকের জন্য) নির্দিষ্ট সংখ্যার চক্র সহ লুপ অনুকরণ করতে পারে এবং in ঠিক আছে এক সেট এর সাবসেট দেখতে ... দেখতে এই ভাবে মনে হয় লুপগুলি বর্ণনা করার চিহ্নগুলিকে হ্রাস করুন ...; পরীক্ষা

  h←{⍬≢↑∩/+/¨¨{⍵∼⊂⍬}¨{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}¨∪¨π¨⍵}
  h 5 6
1
  h 2013 2014
1
  h 8 15
0
  h 21 25
0

একটি সামান্য বিশ্লেষণ:

π¨⍵  for each arg apply factor 
∪¨ for each arg apply unique
{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}¨ for each arg apply subsets
{⍵∼⊂⍬}¨ for each argument subtract Zilde enclosed (that would be the void set)
+/¨¨ for each arg (for each arg apply +/)
⍬≢↑∩/ apply intersection, get the first argument and see if it is Zilde (this it is right because enclosed Zilde it seems is the void set)

1

জাপট , 14 বাইট

®k â ã mx
rf Ê

3 শে বাইট সংরক্ষিত হয়েছে @ শেগগিকে ধন্যবাদ

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


দ্বিতীয় লাইনটি আরও ÎfUÌ lবা আরও কম হতে পারে rf l,। এটি করার সবচেয়ে সংক্ষিপ্ততম উপায় হতে পারে তবে অলিভার আপনাকে এটিকে পরাজিত করে।
শেগি

1

জেলি , 18 9 বাইট

ÆfŒPḊ§)f/

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

-9 এবং আশ্চর্যজনক সহায়তার জন্য @ জোনাথন অ্যালানকে ধন্যবাদ :)

দুটি উপাদানের অ্যারে হিসাবে ইনপুট নেয়। কোড ব্যাখ্যা:

      )    Call Chain 1 for each integer in the input array

ÆfŒPḊ§     Chain 1:
Æf           Compute a list of the prime factors of the integer
  ŒP         Powerset of P, with duplicates and an empty element
    Ḋ        Drop said empty element
     §       Vectorized sum: sum every combination

       f/  Chain 2:
        /    Reduce (the resulting list of two lists of possible sums) by...
       f     ...removing elements to the left that are not in the right

¹


দুটি মানের তালিকা হিসাবে ইনপুট নিন এবং মানটি এড়ান ,ẒƇঅপ্রয়োজনীয়, কোন অ প্রধানমন্ত্রী প্রধানমন্ত্রী-কারণ। তারপরে ÆFḢ€ এটি কেবলমাত্র Æf, তবে পরবর্তীটি আমাদের পুনরাবৃত্তিগুলি দেয় যা আমাদের আসলে প্রয়োজন হতে পারে, উদাহরণস্বরূপ 26=2*13এবং 125=5*5*5যখন 2+13=5+5+5। যে সঙ্গে এমনকি যদিও না ভাল যথেষ্ট, এর পরিবর্তে উদাহরণস্বরূপ হয় 26ব্যবহার 182=2*7*13যা যে হবে 2+13=5+5+5পরিবর্তে আমরা চাই ক্ষমতা- সেট (- কিন্তু না ŒP) নেতৃস্থানীয়, খালি উপাদান ছাড়া (আমরা ব্যবহার করতে পারেন )। S€এখানে সঙ্গে প্রতিস্থাপন করা যেতে পারে §। - আপনি সম্ভবত $এবং এর সাথে বাইটগুলি সংরক্ষণ করতে পারেন Ɗ
জোনাথন অ্যালান

ঐ বোলারদের আমি শেষ আমরা ব্যবহার করতে পারি পদে উল্লেখিত জন্য কোন প্রয়োজন নেই )এটা সঠিকভাবে কাজ (প্লাস প্রতিস্থাপন করতে এবং আমার সমাধানগুলি সঙ্গে œ&সঙ্গে f:) কোড 9 বাইট ÆfŒPḊ§)f/ ব্যবহার করে দেখুন এটা
জনাথন অ্যালান

একটি ব্যাখ্যা সহ আপডেট করা হয়েছে। আবার আপনাকে ধন্যবাদ :)!
ভেন

1
আমি আপনার ব্যাখ্যাটি কিছুটা আপডেট করেছি।
জোনাথন অ্যালান

0

গাইয়া , 16 11 বাইট

ḍzΣ¦
↑@↑&ỵ!

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

শীর্ষ ফাংশন (প্রথম লাইন) মৌলিক উপাদানগুলির পাওয়ারশিটের অঙ্কগুলি গণনা করে এবং দ্বিতীয় ক্রিয়াটি ছেদ করার কোনও উপাদান ননজারো কিনা তা খুঁজে বের করে।

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