কিউব দূরত্বের সংখ্যাগুলির রুভিনিটি


15

এই নম্বরফিলি এন্ট্রি দ্বারা অনুপ্রাণিত

পটভূমি

ঘনক্ষেত্র দূরত্ব সংখ্যা একটি পূর্ণসংখ্যা এর এন যে পূর্ণসংখ্যার সেট হিসাবে এখানে সংজ্ঞায়িত করা হয় দূরত্ব জন্য একটি প্রদত্ত দূরে এক্স । একটি সহজ উদাহরণ স্বরূপ, সঙ্গে n=100এবং x=2, ঘনক্ষেত্র দূরত্ব সংখ্যা হয় {92,108}

এটিকে এক্স পরিবর্তিত করে বৃহত্তর সেটে প্রসারিত করা যেতে পারে । সঙ্গে x ∈ {1,2,3,4}এবং একই n=100, আমরা ফলাফল সেট আছে {36,73,92,99,101,108,127,164}

আসুন সংজ্ঞায়িত সিডি (ঢ, x) এর সব পূর্ণসংখ্যার সেট হিসাবে n ± z³সঙ্গে z ∈ {1,2,3,...,x}

এখন আমরা এই ঘনক্ষেত্রের দূরত্বের সংখ্যার কয়েকটি বিশেষ বৈশিষ্ট্যের দিকে মনোনিবেশ করতে পারি । সংখ্যাগুলি থাকতে পারে এমন অনেক বিশেষ বৈশিষ্ট্যের মধ্যে আমরা যে দুটি সম্পত্তি এখানে আগ্রহী তা হ'ল আদিমতা এবং প্রধান বিভাজক

উপরের উদাহরণস্বরূপ সিডি (100,4) এর জন্য নোট করুন যে 73, 101, 127সমস্ত প্রাইম। আমরা যদি সেট থেকে সেগুলি সরিয়ে ফেলি তবে আমাদের সাথে বাকি রয়েছে {36,92,99,108,164}। এই সংখ্যার সমস্ত প্রধান বিভাজক (ক্রম) {2,2,3,3,2,2,23,3,3,11,2,2,3,3,3,2,2,41}, যার অর্থ আমাদের 5 টি পৃথক প্রধান বিভাজক রয়েছে {2,3,23,11,41}। অতএব আমরা সেই সিডিটি নির্ধারণ করতে পারি (100,4) এর মধ্যে 1 এর বর্ধমানতা রয়েছে 5

এখানে চ্যালেঞ্জটি হ'ল খুব কম বাইটে কোনও ফাংশন বা প্রোগ্রাম লেখার জন্য যা প্রদত্ত ইনপুটটির রেভেন্সিটিকে আউটপুট করে ।

ইনপুট

  • দুটি ধনাত্মক পূর্ণসংখ্যা nএবং x, কোনও সুবিধাজনক বিন্যাসে।

আউটপুট

  • সিডি (এন, এক্স) দিয়ে গণনা করা হলে দুটি ইনপুট সংখ্যার রেভেন্সি বর্ণনা করে এমন একক পূর্ণসংখ্যা ।

বিধি

  • ইনপুট / আউটপুট যে কোনও উপযুক্ত পদ্ধতির মাধ্যমে হতে পারে ।
  • স্ট্যান্ডার্ড লুফোলের বিধিনিষেধগুলি প্রযোজ্য।
  • গণনার স্বাচ্ছন্দ্যের জন্য, আপনি ধরে নিতে পারেন যে ইনপুট ডেটা এমন হবে যে সিডিতে (এন, এক্স) কেবলমাত্র সেটে ইতিবাচক সংখ্যা থাকবে (অর্থাত্ কোনও সিডি (এন, এক্স) কখনও নেতিবাচক সংখ্যা বা শূন্য থাকবে না)।
  • ফাংশন বা প্রোগ্রামটি ইনপুট নম্বরগুলি পরিচালনা করতে সক্ষম হওয়া উচিত যাতে n + x³আপনার ভাষার নেটিভ পূর্ণসংখ্যার ডেটা টাইপের সাথে খাপ খায়। উদাহরণস্বরূপ, 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার ধরণের জন্য, সমস্ত ইনপুট নম্বরগুলি n + x³ < 2147483648সম্ভব।

উদাহরণ

n,x   - output
2,1   - 0   (since CD(2,1)={1,3}, distinct prime divisors={}, ravenity=0)
5,1   - 2
100,4 - 5
720,6 - 11

পাদটিকা

1 - এর নামকরণ করা হয়েছে কারণ আমরা সেটের কার্ডিনাল আইটিতে আগ্রহী নই , তবে একটি ভিন্ন ধরণের পাখি। যেহেতু আমরা "সাধারণ" বিভাজনকারীদের সাথে ডিল করছি, তাই আমি সাধারণ কাক ব্যবহার করতে বেছে নিয়েছি ।


কিভাবে 100,4ফলন হয় 5? ঘনক্ষেত্র দূরত্ব যে সেটের সংখ্যা 36,164, এবং মৌলিক যে সেটের কারণ 2,3,41(যেহেতু যে সেটের কারণ {2, 3, 4, 6, 9, 12, 18, 36}এবং {2, 4, 41, 82, 164}যথাক্রমে)। সুতরাং, আউটপুট 3 হওয়া উচিত, 5 নয় 5.
আর। কাপ

2
@ আর.ক্যাপ 100,4হ'ল ওপি ব্যাকগ্রাউন্ড বিভাগে ব্যাখ্যা করে। আপনার ভুলটি মনে হচ্ছে আপনার সমস্ত বিবেচনা করা উচিত 1..x, তাই [1,2,3,4]এই ক্ষেত্রে।
FryAmTheEggman

পছন্দ করুন ঠিক আছে. আমি এটাকে এখন পেলাম.
আর কাপ,

এটি কি [রুহ-ভিইইউ-নুহ-টি] উচ্চারণ করা হবে (বা / রবিভিটি / আপনারা যারা আইপিএ পড়েন তাদের জন্য)?
ফাঁস নুন

1
@ কেনি লাউ আমার মাথায়, আমি এটিকে "রহ-
ভিএন

উত্তর:


4

জেলি, 16 বাইট

ŒRḟ0*3+µÆfFœ-µQL

এই ক্রমে x এবং n কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে । এটি অনলাইন চেষ্টা করুন!

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

ŒRḟ0*3+µÆfFœ-µQL  Main link. Arguments, x, n

ŒR                Range; yield [-x, ..., x].
  ḟ0              Filter out 0.
    *3            Cube each remaining integer.
      +           Add n to all cubes.
       µ          Begin a new, monadic link. Argument: A (list of sums)
        Æf        Factorize each k in A.
          F       Flatten the resulting, nested list.
           œ-     Perform multiset difference with A.
                  If k in A is prime, Æf returns [k], adding on k too many to the
                  flat list. Multiset difference with A removes exactly one k from
                  the results, thus getting rid of primes.
                  If k is composite (or 1), it cannot appear in the primes in the
                  flat list, so subtracting it does nothing.
             µ    Begin a new, monadic link. Argument: D (list of prime divisors)
              Q   Unique; deduplicate D.
               L  Compute the length of the result.

4

পাইথ - 21 19 18 বাইট

আমি ভাবছি যদি কোন কৌশল আছে কিনা।

l{st#mP+Q^d3s_BMSE

টেস্ট স্যুট

l                   Length
 {                  Uniquify
  s                 Combine divisor lists
   t#               Filter by if more than one element
     PM             Take prime factorization of each number
       +RQ          Add each num in list to input
          s_BM      Each num in list and its negative (with bifurcate)
              ^R3   Cube each num in list
                 SE Inclusive unary range - [1, 2, 3,... n] to input

3

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

f(n,x)=endof(∪(foldl(vcat,map(k->[keys(factor(k))...],filter(i->!isprime(i),[n+z^3for z=[-x:-1;1:x]])))))

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

Ungolfed:

function f(n, x)
    # Get all cube distance numbers
    cubedist = [n + z^3 for z = [-x:-1; 1:x]]

    # Filter out the primes and zeros
    noprimes = filter(i -> !isprime(i) && i > 0, cubedist)

    # Factor each remaining number
    factors = map(k -> [keys(factor(k))...], noprimes)

    # Flatten the list of factors
    flat = foldl(vcat, factors)

    # Return the number of unique elements
    return endof(∪(flat))
end

অনুমানটি আপডেট করা হয়েছে; আপনাকে আর 0 এর বিষয়ে চিন্তা করতে হবে না।
ডেনিস

@ ডেনিস নাইস, মাথা উঁচু করার জন্য ধন্যবাদ।
অ্যালেক্স এ।


2

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

:3^t_h+tZp~)"@Yf!]vun

ইনপুট হয় x, nএকটি নতুন লাইন দ্বারা পৃথক।

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

ব্যাখ্যা

:       % take n implicitly. Generate [1,2,...,n]
3^      % raise to 3, element-wise
t_h     % duplicate, negate, concatenate horizontally: [1,2,...,n,-1,2,...-n]
+       % take x implicitly. Add to that array
t       % duplicate
Zp      % array that contains true for primes
~       % logical negate
)       % apply index to keep only non-primes
"       % for each number in that array
  @     %   push that number
  Yf!   %   prime factors, as a column array
]       % end for each
v       % concatenate vertically all factors
u       % remove repeated factors
n       % number of elements of that array. Implicitly display

2

জে, 30 বাইট

#@~.@(,@:q:-.0&,)@:+(|#^&3)@i:

এটি একটি dyadic ক্রিয়া, নিম্নলিখিত হিসাবে ব্যবহৃত:

   f =: #@~.@(,@:q:-.0&,)@:+(|#^&3)@i:
   100 f 4
5

এখানে চেষ্টা করুন।

ব্যাখ্যা

#@~.@(,@:q:-.0&,)@:+(|#^&3)@i:
                            i:  Range from -x to x
                    (     )@    Apply this verb to the range:
                       ^&3        a) every item cubed
                     |            b) absolute value of every item
                      #           c) every item in a) repeated b) times; this removes 0
                                     and produces some harmless duplication
                   +            Add n to every element of the resulting list
     (          )@:             Apply this verb to the resulting vector:
             0&,                  a) the vector with 0 appended
      ,@:q:                       b) flat list of prime divisors in the vector
                                     (and some extra 0s since we flatten an un-even matrix)
           -.                     c) list b) with elements of a) removed; this gets rid of
                                     the extra 0s and all primes that were in the list
#@~.@                           Remove duplicates and take length

2
@:+(কেন এত দু: খিত, চুলের লোক?
অ্যাডমবর্কবার্ক

উত্তরে টিআইও-র লিঙ্ক?
আর

@ ইস্টারলিআইর্ক টিআইও-তে জে নেই try
জাগারব

@ জাগারব ওকেই ___
আর

2

পাইথন 3.5, 218 198 বাইট:

( আমাকে 20 বাইট বাঁচানোর জন্য ব্লুকে ধন্যবাদ জানাই।)

lambda r,n:len({z for z in{v for f in{t for u in[[r-q**3,r+q**3]for q in range(1,n+1)]for t in u if any(t%g<1 for g in range(2,t))}for v in range(2,f)if f%v<1}if all(z%g>0 for g in range(2,z))})

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


দু'টি জিনিস: == 0 ব্যবহার করবেন না, <1 ব্যবহার করুন এবং! = 0,> 0 ব্যবহার করুন। এছাড়াও, z% 1 এবং z% z শেষে কেন? যারা মনে হয় তারা সর্বদা সত্য হবে।
নীল

@ ব্লু হ্যাঁ, আপনি ঠিক বলেছেন। তারা সর্বদা সত্য হবে, যাতে অংশটি এমনকি প্রয়োজন হয় না। সুতরাং, আমি এটি মুছে ফেলব। এবং এছাড়াও, এই অন্যান্য টিপস জন্য ধন্যবাদ! :)
আর কাপ,

1

প্যারি / জিপি , by৯ বাইট

(n,x)->omega(factorback(select(k->!isprime(k),vector(2*x,i,n+(i-(i<=x)-x)^3))))

এখানে আমার আসল সোজা বাস্তবায়ন। উপরের অনুকূলিত সংস্করণ দুটি ভেক্টরকে একক, কিছুটা আরও জটিল ভেক্টরের সাথে একত্রিত করেছে।

(n,x)->omega(factorback(select(k->!isprime(k),concat(vector(x,i,n-i^3),vector(x,i,n+i^3)))))

এটি সত্যিই আকর্ষণীয়। আমি কোডটি চেষ্টা করার জন্য একটি ব্রাউজারের লিঙ্ক দেখতে পাচ্ছি, তবে কীভাবে প্রকৃতপক্ষে ইনপুট জমা দিতে হবে তা সম্পর্কে আমি নিশ্চিত নই। আপনি একটি ব্যাখ্যা প্রদান করতে পারেন?
অ্যাডমবর্কবার্ক

@ টিমিমিডি: আপনি যদি উপরের যে কোনও একটি f(পছন্দ f=(n,x)->...) এর জন্য নির্ধারণ করেন তবে আপনি এটি দিয়ে পরীক্ষা করতে পারেন f(100,4)। পর্যায়ক্রমে, আপনি এটির সাথে এক লাইনে প্রার্থনা করতে পারেন ((n,x)->...)(100,4)
চার্লস

1

রুবি, 138 বাইট

->(n,x){require'prime'
v=((-x..x).to_a-[0]).map{|i|n+i**3}.reject{|e|Prime.prime?(e)}
Prime.each(v[-1]).select{|i|v.any?{|e|e%i==0}}.size}

এটি ছিল পাং ওয়াই চ্যালেঞ্জ। :-)


তারা রুবিতে প্রাইমগুলি সন্ধান করার জন্য গম্ভীরভাবে একটি বিল্ট আছে? বাহ ... আমি বিশ্বাস করতে পারি না পাইথনের তা নেই।
আর কাপ,

হা. রুবি-doc.org/stdlib-2.3.0/libdoc/prime/rdoc/Prime.html দেখুন - এমনকি সংস্করণ 1.9.3 এ কাজ করা উচিত।
জোস_কাস্ট্রো_আরনাড

1

রুবি, 132 120 114 বাইট

আমি ভালভাবে জানি যে এই সমাধানটির এখনও প্রচুর গল্ফ দরকার। যে কোনও গল্ফিং টিপস স্বাগত।

require'prime'
->n,x{(-x..x).map{|i|j=n+i**3;j.prime?||(j==n)?[]:j.prime_division.map{|z|z[0]}}.flatten.uniq.size}

Ungolfing:

require 'prime'

def ravenity(n, x)
  z = []
  (-x..x).each do |i|
    j = n + i**3
    m = j.prime_division
    if j.prime? || j == n
      z << []
    else
      z << m.map{|q| q[0]}
    end
  return z.flatten.uniq.size
end

1

পাইথন 3.5 - 177 175 159 বাইট

কোনও গল্ফিং টিপস স্বাগত :)

a=range
p=lambda n:any(n%x<1for x in a(2,n))
r=lambda n,x:len(set(sum([[x for x in a(2,z+1)if z%x<1&1>p(x)]for z in filter(p,[n+z**3for z in a(-x,x+1)])],[])))

Ungolfed:

def is_composite(n):
    return any(n % x == 0 for x in range(2, n))

def prime_factors(n):
    return {x for x in range(2, n+1) if n % x == 0 and not is_composite(x)}

def ravenity(n, x):
    nums = [n + z**3 for z in range(-x, x+1)]
    nums = filter(is_composite, nums)
    factors = map(prime_factors, nums)
    factors = sum(factors, [])
    #remove duplicates
    factors = set(factors)
    return len(factors)

0

ওল্ফ্রাম ভাষা (গণিত) , 90 বাইট

Tr[1^Union[First/@Join@@FactorInteger/@Select[z=Range@#2^3;Join@@{#-z,#+z},Not@*PrimeQ]]]&

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

আন-গল্ফড: কোডটি বেশিরভাগ ডান থেকে বামে পড়ে থাকে,

F[n_, x_] := 
  Length[Union[                                        (* number of unique elements   *)
    First /@                                           (* drop multiplicities         *)
      Join @@                                          (* join all prime factor lists *)
        FactorInteger /@                               (* compute prime factors       *)
          Select[                                      (* select those...             *)
            Join @@ {n - Range[x]^3, n + Range[x]^3},  (* ...candidates...            *)
            Not@*PrimeQ]]]                             (* ...that are not prime       *)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.