পরিমিত বিভাজক টুইস্ট


13

সংজ্ঞা

যাক mএবং nইতিবাচক পূর্ণসংখ্যার হন। আমরা যে mএকটি হল ভাজক সুতা এর nপূর্ণসংখ্যার অস্তিত্ব আছে যদি 1 < a ≤ bযেমন যে n = a*bএবং m = (a - 1)*(b + 1) + 1। যদি mথেকে প্রাপ্ত করা যাবে nএটি শূন্য বা তার বেশি ভাজক ওঠা পড়ার প্রয়োগের দ্বারা, তারপর mএকটি হল বংশধর এর n। মনে রাখবেন যে প্রতিটি সংখ্যা তার নিজস্ব বংশধর।

উদাহরণস্বরূপ, বিবেচনা করুন n = 16। আমরা বেছে নিতে পারি a = 2এবং b = 8, যেহেতু 2*8 = 16। তারপর

(a - 1)*(b + 1) + 1 = 1*9 + 1 = 10

যা দেখায় যে 10এটি একটি বিভাজক মোচড় 16। সঙ্গে a = 2এবং b = 5, আমরা কি তবুও ভেবে দেখবে যে 7একটি ভাজক সুতা হয় 10। এইভাবে এর 7বংশধর 16

কাজটি

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে , নকল ছাড়াই বর্ধমান ক্রমে তালিকাভুক্ত nবংশধরের গণনা করুন n

বিধি

আপনাকে অন্তর্নির্মিত ক্রিয়াকলাপগুলি ব্যবহার করার অনুমতি নেই যা কোনও সংখ্যার বিভাজকগুলি গণনা করে।

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

পরীক্ষার কেস

1 ->  [1]
2 ->  [2] (any prime number returns just itself)
4 ->  [4]
16 -> [7, 10, 16]
28 -> [7, 10, 16, 25, 28]
51 -> [37, 51]
60 -> [7, 10, 11, 13, 15, 16, 17, 18, 23, 25, 28, 29, 30, 32, 43, 46, 49, 53, 55, 56, 60]

@ জাগারব যদি আপনি 0 বিভাজক টুইস্টের শৃঙ্খলার জন্য অনুমতি দেন তবে প্রতিটি সংখ্যাটি অন্য কোনও সংখ্যার বংশধর কীভাবে নয়?
রোরলর্ক

3
@rcrmn আমার কাছে শূন্য অপারেশনের একটি শৃঙ্খলা মানে পরিচয় অপারেশন। সুতরাং শূন্য বিভাজক টুইস্টকে মঞ্জুরি দেওয়া থেকে বোঝা যায় যে প্রতিটি সংখ্যা নিজের বংশধর।
জাগারব

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

@ সিআরআরএমএন আমি শব্দটি কিছুটা পরিবর্তন করেছি, এটা কি এখন আরও পরিষ্কার হয়?
জাগারব

@ জগারব দুঃখিত তবে না, এটি কোনও অপারেশন নয়, আপনি সংখ্যার মধ্যে একটি সম্পর্ক নির্ধারণ করছেন। যদি আপনি <প্রাকৃতিক সংখ্যার জন্য সম্পর্কটিকে সংজ্ঞায়িত করেন তবে প্রতিটি এন এর জন্য আপনি প্রতিটি সংখ্যা তার চেয়ে ছোট পাবেন তবে নিজেই নয়। আমি মনে করি এটির মতো কিছু হওয়া উচিত। এই ভাবে আমি মনে করি যে কেবল 4 জন তার নিজস্ব বংশধর হবে (যদিও এটি সম্পর্কে নিশ্চিত নয়)।
রোরলর্ক

উত্তর:


9

পাইথন 2, 109 98 85 82 বাইট

f=lambda n:sorted(set(sum(map(f,{n-x+n/x for x in range(2,n)if(n<x*x)>n%x}),[n])))

যেহেতু (a-1)*(b+1)+1 == a*b-(b-a)এবং b >= a, বংশধররা সবসময় আসল সংখ্যার চেয়ে কম বা সমান হয়। সুতরাং আমরা কেবলমাত্র প্রাথমিক সংখ্যাটি দিয়ে শুরু করতে পারি এবং যতক্ষণ না বাকি থাকে ততক্ষণ কঠোরভাবে ছোট বংশধরদের উত্পন্ন করতে পারি।

শর্তটি (n<x*x)>n%xএকটিতে দুটি জিনিস পরীক্ষা করে - এটি n<x*xএবং n%x == 0

(বেস কেসটি থেকে 3 বাইট নেওয়ার জন্য @ এক্সনোরকে ধন্যবাদ)

পাইথ, 32 বাইট

LS{s+]]bmydm+-bk/bkf><b*TT%bTr2b

উপরোক্ত প্রত্যক্ষ অনুবাদ, sখালি তালিকায় যোগফল যোগ করার সময় পাইথ শ্বাসরোধ করে বলে মনে হচ্ছে except

এটি এমন একটি ফাংশন সংজ্ঞায়িত করে yযা y<number>শেষে সংযোজন করে ডেকে আনা যেতে পারে (যেমন এটি অনলাইনে চেষ্টা করুন ):

LS{s+]]bmydm+-bk/bkf><b*TT%bTr2by60

সিজেম, 47 45 বাইট

{{:X_,2>{__*X>X@%>},{_X\/\-X+}%{F}%~}:F~]_&$}

এছাড়াও কয়েকটি পরিবর্তন করে একই পদ্ধতি ব্যবহার করা হচ্ছে। আমি তুলনা করার জন্য সিজেএম চেষ্টা করে দেখতে চেয়েছিলাম, তবে দুর্ভাগ্যক্রমে আমি পাইথ / পাইথনের চেয়ে সিজোমের চেয়ে অনেক খারাপ, তাই সম্ভবত উন্নতির জন্য আরও অনেক জায়গা আছে।

উপরেরটি একটি ব্লক (মূলত নামবিহীন ফাংশনগুলির সিজেমের সংস্করণ) যা কোনও ইনট নেয় এবং একটি তালিকা ফেরত দেয়। আপনি এটির মতো পরীক্ষা করতে পারেন ( এটি অনলাইনে চেষ্টা করে দেখুন ):

{{:X_,2>{__*X>X@%>},{_X\/\-X+}%{F}%~}:F~]_&$}:G; 60 Gp

আমি পাইথন বিশেষজ্ঞ নই, তবে সেখানে কেন আপনার প্রয়োজনের কোনও কারণ set()আছে? আপনি কি কেবল সাজানো তালিকাটি ফিরিয়ে দিতে পারবেন না?
অ্যালেক্স এ।

@ অ্যালেক্স set()হ'ল ডুপ্লিকেটগুলি সরিয়ে ফেলতে হবে :)
স্পে 3000

ওহ ঠিক আছে. ঝরঝরে। চমৎকার কাজ!
অ্যালেক্স এ

আপনি সম্ভবত [n]+sum(...,[])হিসাবে কি করতে পারেন sum(...,[n])?
xnor

@ এক্সন আহ আহ, আমি পারি আমি []তালিকাগুলির সংক্ষিপ্তসারের জন্য বেস কেস ছাড়া আর কিছুই ব্যবহার করি নি , তাই আমি সম্পূর্ণ ভুলে গেছি!
Sp3000

6

জাভা, 148 146 104 বাইট

গল্ফ সংস্করণ:

import java.util.*;Set s=new TreeSet();void f(int n){s.add(n);for(int a=1;++a*a<n;)if(n%a<1)f(n+a-n/a);}

দীর্ঘ সংস্করণ:

import java.util.*;
Set s = new TreeSet();
void f(int n) {
    s.add(n);
    for (int a = 1; ++a*a < n;)
        if (n%a < 1)
            f(n + a - n/a);
}

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


পিপিসিজিতে আপনাকে স্বাগতম! আপনি পরিবর্তন করে একটি দম্পতি সংরক্ষণ করতে পারবেন a*bকরার nলাইন 9. উপর
Geobits

স্বাগত এবং পরামর্শের জন্য ধন্যবাদ! হ্যাঁ, আমার এই ছোট ছোট জিনিসগুলি স্পট করতে একটু সময় লাগবে। প্রতি বাইট গণনা! আবার ধন্যবাদ!
টিএনটি

c=n+a-bভিতরে রেখে আরও দু'জনকে বাঁচাতে পারেন add()। বিকল্পভাবে, আপনি cপুরোপুরি পরিত্রাণ পেতে পারেন এবং কেবল n+a-bএকই দুটি বাইটের জন্য উভয় জায়গায় ব্যবহার করতে পারেন ।
জিওবিটস

যার কথা বলতে গিয়ে, আমার মনে হয় না যে আমার addদুবার ব্যবহার করা দরকার । এক মুহুর্ত ধরে রাখুন ...
TNT

তবে দ্বিতীয় লুপটি পুরোটির প্রয়োজন নেই। আপনার যদি এমন একটি থাকে aযা আপনি জানেন যে nপরিষ্কারভাবে বিভক্ত হয় , তবে আপনার সন্ধানের জন্য লুপ করা উচিত নয় b, এটি ঠিক n/a। এই মুহুর্তে এটি আমার কাছাকাছি আসা শুরু করে;)
Geobits

4

জাভা, 157 121

এখানে একটি পুনরাবৃত্ত ফাংশন যা প্রতিটি বংশধরদের বংশধর হয় n। এটি একটি প্রদান করে TreeSetযা পূর্বনির্ধারিত অনুসারে বাছাই করা হয়।

import java.util.*;Set t(int n){Set o=new TreeSet();for(int i=1;++i*i<n;)o.addAll(n%i<1?t(n+i-n/i):o);o.add(n);return o;}

কিছু লাইন বিরতি সহ:

import java.util.*;
Set t(int n){
    Set o=new TreeSet();
    for(int i=1;++i*i<n;)
        o.addAll(n%i<1?t(n+i-n/i):o);
    o.add(n);
    return o;
}

2

অক্টাভা, 107 96

function r=d(n)r=[n];a=find(!mod(n,2:sqrt(n-1)))+1;for(m=(a+n-n./a))r=unique([d(m) r]);end;end

সুন্দর-মুদ্রণ:

function r=d(n)
  r=[n];                          # include N in our list
  a=find(!mod(n,2:sqrt(n-1)))+1;  # gets a list of factors of a, up to (not including) sqrt(N)
  for(m=(a+n-n./a))               # each element of m is a twist
    r=unique([d(m) r]);           # recurse, sort, and find unique values
  end;
end

1
এটি আমার বোঝা যাচ্ছে যে অষ্টাভ কেবল এবং endনা দিয়ে ব্লকগুলি শেষ করতে পারে । এটি আপনাকে 11 বাইট সংরক্ষণ করতে পারে। endforendfunction
অ্যালেক্স এ

আরে, আপনি ঠিক বলেছেন! আমি কীভাবে ভাষা শিখলাম এবং কখনই বুঝতে পারি নি যে এটি করা যেতে পারে। আমি এটির সাথে একাধিক গল্ফ করার পরে কেন আপনি প্রথমে এটি চিহ্নিত করবেন?
dcsohl

আমি কেবল এটি জানতাম কারণ আমি সম্প্রতি অন্য প্রশ্নের গল্ফটিতে এটি দেখার পরে এটি সন্ধান করেছি। আমি কখনই অক্টাভ ব্যবহার করি নি এবং মাতলাব ব্যবহার করার পরে বহু বছর হয়েছে। আমার অনুমান যে পিপিসিজিতে সক্রিয় অক্টেভ ব্যবহারকারীরা এতগুলি নেই, তবে আমি ভুল হতে পারি।
অ্যালেক্স এ।

ভাল, এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
ডিসিএসএইচএল

আমার আনন্দ, আমি সাহায্য করতে পেরে আনন্দিত। সুন্দর সমাধান।
অ্যালেক্স এ।

1

হাস্কেল, ১০০ 100 বাইট

import Data.List
d[]=[]
d(h:t)=h:d(t++[a*b-b+a|b<-[2..h],a<-[2..b],a*b==h])
p n=sort$nub$take n$d[n]

ব্যবহার: p 16যা আউটপুট[7,10,16]

ফাংশনটি dপুনরাবৃত্তভাবে সমস্ত বংশধরদের গণনা করে, তবে সদৃশগুলির জন্য পরীক্ষা করে না, তাই অনেকগুলি একাধিকবার প্রদর্শিত হয়, যেমন এস এর d [4]একটি অসীম তালিকা প্রদান করে 4। ফাংশনগুলি এই তালিকা থেকে pপ্রথম nউপাদানগুলিকে নিয়ে যায় , সদৃশগুলি সরায় এবং তালিকাটিকে সাজান। Voila।


1

সিজোম - 36

ri_a\{_{:N,2>{NNImd!\I-z*-}fI}%|}*$p

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

বা, পৃথক পদ্ধতি:

ri_a\{_{_,2f#_2$4*f-&:mq:if-~}%|}*$p

আমি প্রায় 2 দিন আগে এগুলি লিখেছিলাম, 36 এ আটকে গিয়েছি, হতাশ হয়ে পড়েছি এবং পোস্ট না করেই ঘুমাতে চলেছি।

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