প্রতিবেশী সংখ্যার সর্বোচ্চ মৌলিক গুণক


13

আমি মনে করি ক্রমানুসারে এই চ্যালেঞ্জটি ব্যাখ্যা করা সবচেয়ে সহজ। একটি ইনপুট নম্বর এন এবং দিয়ে শুরু করুন :

  1. এটির সর্বোচ্চ মৌলিক উপাদানটি সন্ধান করুন
  2. N এর নীচে এবং নীচের সংখ্যাগুলি পরীক্ষা করুন এবং দেখুন যে সর্বোচ্চ মৌলিক উপাদানটি বেশি (যেমন এন -1 এর সর্বোচ্চ মৌলিক গুণক এবং / অথবা এন + 1 এন এর গুণকটির চেয়ে বেশি )
  3. উচ্চতর পরীক্ষা চালিয়ে যাও এবং / অথবা প্রতিবেশী সংখ্যার কম এন নির্দেশাবলী মধ্যে যেখানে সর্বোচ্চ কারণের বৃদ্ধি করা হয় ( (এন-2, এন -3 ...) এবং / অথবা (n + 2, n + 3 ...) এবং তাই চালু)
  4. আমরা উভয় দিকের মধ্যে কোনও মৌলিক উপাদানগুলি না থাকলে আমরা ইতিমধ্যে খুঁজে পেয়েছি যে আমরা থামিয়েছি এবং সর্বাধিক প্রধান ফ্যাক্টরটির মুখোমুখি হয়েছি output

আসুন একটি উদাহরণ তাকান:

245প্রধান কারণ আছে 5, 7, 7। এর প্রতিবেশীরা হলেন:

244 -> 2,  2,  61
245 -> 5,  7,  7
246 -> 2,  3,  41

উভয় দিকেই সর্বাধিক প্রধান ফ্যাক্টর বৃদ্ধি পাচ্ছে, তাই আমাদের অবশ্যই পরবর্তী প্রতিবেশীর দিকে নজর দেওয়া উচিত:

243 -> 3,   3,  3,  3,  3
244 -> 2,   2,  2,  61
245 -> 5,   7,  7
246 -> 2,   3,  41
247 -> 13,  19

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

আরেকটি উদাহরণ:

দেখা যাক 1024। এর প্রধান কারণগুলি 2, 2, 2, 2, 2, 2, 2, 2, 2, 2। এর নিকটতম প্রতিবেশীদের প্রধান কারণগুলি হ'ল:

1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41

সর্বোচ্চ মৌলিক উত্পাদক উভয় দিক বৃদ্ধি করা হয়, থেকে 2থেকে 31বা 41। আসুন প্রতিবেশীদের দিকে নজর দিন:

1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19

সর্বোচ্চ মৌলিক উত্পাদক 1022হয় 73, এবং সর্বোচ্চ মৌলিক উত্পাদক জন্য 1026হয় 19। যেহেতু আমরা এতে আগ্রহী না তার 19চেয়ে কম হ'ল 41এটি এখনও এন এর চেয়ে কম সংখ্যার জন্য বৃদ্ধি পাচ্ছে, সুতরাং আমরা পরেরটি সেই দিকে পরীক্ষা করব :

1021 -> 1021
1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19

1021 একটি প্রধান এবং আমাদের সর্বোচ্চ সমস্যার মুখোমুখি হয়েছে, সুতরাং এটি ফিরিয়ে দেওয়া উচিত।

নিয়মাবলী:

  • আপনি কেবল Nচেয়ে বড় 1এবং এর চেয়ে ছোট ইতিবাচক পাবেন 2^31-2
  • ইনপুট এবং আউটপুট ফর্ম্যাটগুলি alচ্ছিক, তবে সংখ্যাগুলি অবশ্যই বেস 10 এ থাকা উচিত।
  • যতক্ষণ না আপনার দিকে সর্বোচ্চ মান বাড়ছে ততক্ষণ আপনি উচ্চতর প্রাইমগুলির সন্ধান চালিয়ে যাওয়া উচিত। দিকনির্দেশগুলি একে অপরের থেকে স্বতন্ত্র।

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

বিন্যাস: N, highest_factor

2, 3
3, 3
6, 7
8, 11
24, 23 
1000, 997
736709, 5417 
8469038, 9431

ধরা যাক আমরা 2এন এর জন্য সর্বোচ্চ মৌলিক ফ্যাক্টরটি পাই আমরা তারপরে এন 5-1 এবং 61এন + 1 এর জন্য পাই । তারপরে আমরা 19এন -২ এবং 67এন + ২ এর জন্য পাই । আমাদের কম সংখ্যক চেষ্টা করা উচিত, যেহেতু 19>5বা থামানো উচিত 5<61? অর্থাৎ ম্যাক্সিমা প্রতি পাশে রাখা হয়? (উদাহরণটি গাণিতিকভাবে সম্ভব কিনা তা আমি নিশ্চিত নই))
পূর্কাকাডারী

@ পিটু ১৯৯৮, প্রশ্নটি কি এখন আরও স্পষ্ট?
স্টিভি গ্রিফিন

N=2আসলে কোনও প্রান্তের কেস বলে মনে হচ্ছে যেহেতু 1কোনও প্রাথমিক কারণ নেই, তাই আমাদের চালিয়ে যাওয়া উচিত কিনা তা স্থির করার জন্য আমরা কোনও সর্বাধিক প্রাইম ফ্যাক্টরের সাথে তুলনা করতে পারি।
জোনাথন অ্যালান

উত্তর:


4

গণিত, 82 74 বাইট

8 টি বাইট সংরক্ষণের জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&

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

±n_:=#//.x_/;l[t=x+n]>l@x:>tএকটি অ্যানারি ফাংশন সংজ্ঞায়িত করে ±যা গ্লোবাল ফাংশনটির পূর্ণসংখ্যার ইনপুটটিকে nততক্ষণ বাড়িয়ে রাখে যতক্ষণ না বৃহত্তম প্রাইম ফ্যাক্টর বাড়ছে। (বৃহত্তম-প্রাইম-ফ্যাক্টর ফাংশনটি সংজ্ঞায়িত করা হয় l=FactorInteger[#][[-1,1]]&)) {±-1,±1}সুতরাং ইনক্রিমটি -1এবং ইনক্রিমেন্টের সাথে আবার ইনপুট পূর্ণসংখ্যায় এই ফাংশনটি দুবার প্রয়োগ করে 1। তারপরে, Max@@(...l...)/@...এইভাবে পাওয়া দুটি বৃহত্তম-প্রধান-কারণগুলির বৃহত্তর নেয়।

পূর্ববর্তী জমা:

Max@@(l=FactorInteger[#][[-1,1]]&)/@(#//.x_/;l[t=x+#2]>l[x]:>t&@@@{{#,-1},{#,1}})&

@@@(এবং আপনি l@xসেখানে এটি ব্যবহার করতে পারেন ) এড়িয়ে কয়েকটি বাইট সংরক্ষণ করেছেন :Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&
মার্টিন এন্ডার

1

পার্ল, 137 বাইট

এর জন্য 122 বাইট কোড + 15 বাইট -pএবং -Mntheory=:all

sub f{$t=(factor$_+pop)[-1]}$i=$j=1;while($i|$j){f++$c;($i&=$t>$h)&&($h=$t);f-$c;($j&=$t>$l)&&($l=$t)}$_=$h>$l?$h:$l?$l:$_

এটি চালানোর জন্য:

perl -pMntheory=:all -e 'sub f{$t=(factor$_+pop)[-1]}$i=$j=1;while($i|$j){f++$c;($i&=$t>$h)&&($h=$t);f-$c;($j&=$t>$l)&&($l=$t)}$_=$h>$l?$h:$l?$l:$_' <<< 736709

আপনি যদি ntheoryইনস্টল না করে (echo y;echo) | perl -MCPAN -e 'install ntheory'থাকেন তবে এটি আপনার টার্মিনালে টাইপ করে ইনস্টল করতে পারেন ।


0

রুবি, 99 বাইট

->n{f=->n{i=2;n%i<1?n/=i:i+=1while i<n;n};g=->s,z{s+=z while f[s+z]>b=f[s];b};[g[n,1],g[n,-1]].max}

ব্যাখ্যা:

  • f () সর্বোচ্চ প্রধান উপাদান prime
  • g () হল এক দিক থেকে প্রতিবেশীদের সন্ধান করা ফাংশন searching
  • (n, -1) এবং (n, + 1) এ উভয় দিক অনুসন্ধান করতে g প্রয়োগ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.