এটিকে কারখানা করুন! ... খারাপভাবে


15

একটি অদ্ভুত ছাগলছানা একটি প্রোগ্রাম যা অবশ্যই একটি সংখ্যা বা নিম্নলিখিত ফর্ম মধ্যে একটি অভিব্যক্তি উত্পাদক করতে ব্যবহার করে: p1^e1 * p2^e2 * ... * pn^en। সমান এক্সটেনশনগুলি 1বাদ দেওয়া হয় যেমন360 = 2^3 * 3^2 * 5

ছাগলছানা এই আউটপুটটিকে প্রোগ্রামটিতে নতুন ইনপুট হিসাবে টাইপ করে তবে সে ^চিহ্নটি বুঝতে পারে না তাই মাঝে মাঝে সে সেই এক বা একাধিক লোককে এড়িয়ে যায় যারা সংশ্লিষ্ট বেস-বেস এবং এক্সপোনেন্টকে সম্মতি দেয়। যেমন(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)

এই ভুলগুলির কারণে তিনি একটি আলাদা ফ্যাক্টেরাইজেশন পেতে পারেন যা সে আবার ইনপুট করতে পারে (0 বা আরও বেশি এড়িয়ে যাওয়ার সাথে ^)। যতক্ষণ না কারকটি পরিবর্তন হয় ততক্ষণ তিনি প্রক্রিয়াটি পুনরাবৃত্তি করেন (সম্ভবত সেখানে আর কিছু নেই ^বা তিনি আউটপুটটি সঠিকভাবে অনুলিপি করেছেন)।

আপনার এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা একটি পূর্ণসংখ্যা n( n>1) দিয়েছিল যা ক্রমবর্ধমান ক্রমে সমস্ত সম্ভাব্য সংখ্যা আউটপুট করে দেয় যার ফ্যাক্টরীকরণটি বাচ্চাটি (সহ n) সমাপ্ত হতে পারে be উদাহরণস্বরূপ 16ইনপুটটির সম্ভাব্য চূড়ান্ত কারণগুলি factor(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23

ইনপুট বিশদ:

  • ইনপুট একক পূর্ণসংখ্যার চেয়ে বড় 1
  • এর চেয়ে বেশি আউটপুট নম্বর উত্পন্ন করে এমন কোনও ইনপুট দেওয়া হবে না 2^31-1
  • 1000আউটপুট সংখ্যার চেয়ে বেশি উত্পন্ন করে এমন কোনও ইনপুট দেওয়া হবে না

আউটপুট বিশদ:

  • আপনার ভাষার জন্য একটি সুবিধাজনক ফর্ম পূর্ণসংখ্যার একটি তালিকা

উদাহরণ:

ইনপুট => আউটপুট

11    => 11
16    => 16 24 69
360   => 140 360 770 1035 1219 1280 2875 3680
605   => 560 605 840 2415
2048  => 211 2048
58564 => 230 456 1311 2508 9975 12768 13794 20748 58564 114114 322102

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


আমরা ইতিমধ্যে এটি ফ্যাক্টরাইজ না?
অপ্টিমাইজার

5
@ অপ্টিমাইজার এটি সম্পূর্ণ ভিন্ন different
এলোমেলো

1
360 এর শেষ সংখ্যাটি 3 6 80: 2 ^ 3 * 3 ^ 2 * 5 => 23 * 32 * 5 = 3680
ব্লুটোরেঞ্জ

@ ব্লুটোরেঞ্জ ধন্যবাদ, সম্পাদিত।
এলোমেলো

উত্তর:


5

সিজেম - 66

ria{_{:XmF{1=1>},La\{a1$\f++}/La-{XI{~#}%:*/I{si}%:**}fI}%|}1e3*$p

এটি http://cjam.aditsu.net/ এ চেষ্টা করুন

ব্যাখ্যা:

ria                       read token, convert to integer and wrap in array
{…}1e3*                   repeat 1000 times
    _                     duplicate array
    {…}%                  transform each array item (number) using the block
        :X                store the number in X
        mF                factorize with exponents
        {1=1>},           keep only the factors with exponent > 1
        La\{a1$\f++}/     get all the subsets (*)
        La-               remove the empty subset
        {…}fI             for I = each subset of prime factors with exponent > 1
            XI{~#}%:*/    divide X by all the factors in I
            I{si}%:**     multiply with the primes from I
                          concatenated with their exponents
    |                     add the new numbers to the array, removing duplicates
$                         sort
p                         print the final array

(*) ধন্যবাদ মার্টিন


সিজাম গড থেকে সিজাম কোড
কাইন

যে কোনও পরিমাণ ^এক পদক্ষেপে সরানো যেতে পারে। সুতরাং 58564 = 2^2 * 11^4এটি উত্পন্ন করতে সক্ষম হওয়া উচিত 2508 = 22 * 114
এলোমেলো

@ র্যান্ডোমরা আপনার এই ধরণের জিনিসটির জন্য একটি উদাহরণ যুক্ত করা উচিত
অদিতসু ছাড়ুন কারণ এসই ইভিল

@ আরন্দোমরা এখনই আরও ভাল হওয়া উচিত
অ্যাডিটসু প্রস্থান করুন কারণ এসই ইভিএল

গ্রেট! উদাহরণ যুক্ত। এড়িয়ে যাওয়ার জন্য দুঃখিত
এলোমেলো

4

রুবি, 219

এটি শুরু করতে:

s=->(x){A=[];def k(x)A<<x
y=Prime.prime_division x;n=0..y.size-1
n.each{|i|n.to_a.combination(i+1).each{|c|c.each{|z|v=y.dup
v[z][1]>1?v[z]=[v[z].join.to_i,1]:next
k v.inject(1){|s,b|s*b[0]**b[1]}}}}end;k x;A.uniq.sort}

সংখ্যার একটি অ্যারে ফিরিয়ে ফাংশন তৈরি করে।

https://ideone.com/iOMGny

এটি এর মতো ব্যবহার করুন:

#usage

#load from the standard library
require"prime"

#read from stdin and print to stdout
p s.call $<.read.to_i

মোবাইল ফোনে এই সমস্ত লিখতে এত মজা ...


3

পার্ল, 193 বাইট

sub R{my($k,$v,@z)=@_;map{$k**$v*$_,$v>1?($k.$v)*$_:()}@z?R(@z):1}
@q=(0+<>);
while($x=pop@q){
my%f;@r=sort{$a<=>$b}@r,$x;
for(2..$x){$x/=$_,$f{$_}++while$x%$_<1}
$_~~@r||push@q,$_ for R%f
}
print"@r"

নিউডলাইনগুলি কেবল পঠনযোগ্যতার জন্য যুক্ত করা হয়েছে।

লুপটি পরবর্তী সংখ্যা ( $x) কে %fপ্রাইমস এবং পাওয়ারগুলির একটি হ্যাশ ( ) এ যুক্ত করে। রিকার্সিভ ফাংশন ( R) এই হ্যাশটিকে সমস্ত সংখ্যা তৈরি করতে ব্যবহার করে যা ^চিহ্নগুলি সরিয়ে দিয়ে প্রাপ্ত হতে পারে । এই সংখ্যাগুলি একটি কাতারে যুক্ত করা হয় ( @q), এবং লুপটি বাইরের দ্বারা পুনরাবৃত্তি হয়। সারি থেকে প্রতিটি সংখ্যা @rমুদ্রণের জন্য একটি অনন্য, সাজানো অ্যারে ( ) এ রাখা হয় ।


3

পাইথ, 46 45 44

Su{smmu*/N^T/PdTv+`T`/PdTkdyft/PdT{PdGU^T3]Q

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

একাধিক ^বাগ সংশোধন করা হয়েছে। এই ক্ষেত্রে:

Input:  58564
Output: [230, 456, 1311, 2508, 9975, 12768, 13794, 20748, 58564, 114114, 322102]

নোট করুন যে এই কোডটি প্রশ্নটি জিজ্ঞাসা করার পরে ধাক্কা খাওয়া অফিসিয়াল কম্পাইলারের সাথে কয়েকটি বাগফিক্সের উপর নির্ভর করে। তবে এটি কোনও নতুন ভাষার বৈশিষ্ট্য ব্যবহার করে না।


58564 এর জন্য আপনি কী পাবেন?
অ্যাডিটসু ছেড়ে গেছে কারণ এসই এভিল

[230, 456, 1311, 58564, 322102], যা ভুল।
isaacg

@ অ্যাডিতসু বিষয়টি সমাধান করেছেন।
isaacg

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

@ আরেন্ডোমরা আপনার উত্তরটি গ্রহণ না করার সিদ্ধান্তটি আমি বুঝতে পারি। তবে, আমি কেবল বাগফিক্সটি কী তা উল্লেখ করতে চাই: uঅন্য হ্রাসের ভিতরে হ্রাস ( ) ব্যবহার করা অসম্ভব। আমি উপযুক্ত স্থানে একটি 2 থেকে 3 এ পরিবর্তন করেছি যাতে হ্রাস করতে 2 এর পরিবর্তে 3 ইনপুট লাগবে। সবই।
isaacg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.