সর্বনিম্ন সাধারণ অবিভাজক


11

মূলত, সমস্যাটি হ'ল ধনাত্মক সংখ্যার একটি সেট জন্য, একটি ন্যূনতম সংখ্যা যা এর কোনও উপাদানের বিভাজক নয় , যেমন ।ডি এস x এস , ডি এক্সSdSxS, dx

চিহ্নিত করুন n=|S|এবং C=max(S) । ফাংশন বিবেচনা করুন F(x)= অন্তত মৌলিক বিভাজক না সংখ্যা xএফ (এক্স) \ লেক \ লগ এক্স দেখতে সহজ F(x)logx। এবং একটি সেট S , আসুন F(S)= সর্বনিম্ন প্রধান যা এস এর কোনও উপাদানকে ভাগ করে না S। আমরা একটি উপরের আবদ্ধ আছে

F(S)F(lcm(S))F(Cn)nlogC.

অতএব একটি সাধারণ ব্রুট-ফোর্স অ্যালগরিদম, যা 1 থেকে n \ লগ সি পর্যন্ত সমস্ত সংখ্যা গণনা করে nlogCএবং এটি এস এর কোনও উপাদানকে ভাগ করে না দেয় কিনা তা পরীক্ষা করে S, বহুপক্ষীয় এবং সময় জটিলতা O(n2logC)

সমস্যাটি সমাধানের অন্য উপায়টি হ'ল এস এর প্রতিটি উপাদানগুলির জন্য সমস্ত উপাদানগুলি গণনা করা Sএবং সেটিকে ব্রুট-ফোর্স অ্যালগরিদমে ব্যবহার করে এটি পরীক্ষা করতে ও (1) সময়ে x উত্তর কিনা if এই অ্যালগরিদমের সময় জটিলতা রয়েছে O (n \ cdot \ min (\ sqrt {C}, n \ লগ সি) + n \ লগ সি) এবং O (n \ লগ সি) মেমরি ব্যবহার করে, কারণ আমাদের গণনা করার প্রয়োজন নেই এবং n \ লগ সি এর চেয়ে বড় স্টোর ফ্যাক্টর । ছোট এন এবং সি এর জন্য এটি আরও ভাল সম্পাদন করে।O(1)O(nmin(C,nlogC)+nlogC)O(nlogC)nlogCnC

বিশদভাবে, অ্যালগরিদম দুটি অংশ নিয়ে গঠিত:

  1. আঁকো একটি সেট S^ সমস্ত উপাদান সব কারণের গঠিত S , অর্থাত্

    xS fnlogC, (fxfS^)
    এটি O(nmin(C,nlogC)) সময় এবং O(nlogC) মেমরিতে করা যায়। (এটি কোথা থেকে এসেছে? এস এর যে কোনও উপাদানগুলির জন্য S, আমরা এটির সাথে r sqrt {C numbers পর্যন্ত সমস্ত সংখ্যা Cবা N n লগ সি পর্যন্ত সমস্ত প্রাইম nlogC, যেটি ছোট হোক না কেন এটি ব্যবহার করে ফ্যাক্টর করতে পারি ; সুতরাং এস এর প্রতিটি উপাদান) O (\ মিনিট (\ sqrt {C}, n \ লগ সি)) সময়ে Sফ্যাক্টর করা যেতে পারে )O(min(C,nlogC))
  2. ন্যূনতম সংখ্যা খুঁজে বের । এই পদক্ষেপের জন্য সময় প্রয়োজন, যদি সময়ে করা যায় কিনা তা পরীক্ষা করে । হে ( | এস | ) = হে ( লগ ইন করুন সি ) এক্স এস হে ( 1 )dS^O(|S^|)=O(nlogC)xS^O(1)

আমার দুটি প্রশ্ন রয়েছে যা সম্পর্কে আমি আগ্রহী:

  1. সমস্যাটি সমাধান করার জন্য কি কোনও দ্রুত অ্যালগরিদম আছে?
  2. প্রদত্ত এবং আমরা কীভাবে সর্বাধিক সর্বনিম্ন সাধারণ অবিভাজক দিয়ে একটি সেট করতে পারি ?সি এসnCS

"প্রাক্পম্পিউট" দ্বারা আমি বোঝাতে চাইছি ব্রুট-ফোর্স অ্যালগরিদম শুরু করার আগে। ২. ফ্যাক্টরিংয়ের জটিলতা প্রকৃতপক্ষে সুবেস এক্সনসনশিয়াল, । C
স্কাইটারএক্স

2 পয়েন্টের ডিডাব্লু, সংখ্যার প্রতিনিধিত্বকারী বিটস্ট্রিংয়ের দৈর্ঘ্যের তুলনায় ফ্যাক্টরিংয়ের জটিলতা সুফলযুক্ত, তবে স্কাইটারএক্স সঠিকভাবে বলেছে যে এটি , অর্থাৎ আকারের বর্গমূলের সমানুপাতিক সংখ্যা. O(C)
লিওউ ভিঙ্কুয়েজেন

@ লিউওভিঙ্কুয়েজেন, এটি আমার কাছে ঠিক দেখাচ্ছে না। জিএনএফএস ব্যবহার করে ফ্যাক্টরিংয়ের জটিলতা হ'ল যা উল্লেখযোগ্যভাবে কম । দেখুন এন.ইউইকিপিডিয়া.আর / উইকি /হে ( O(exp{1.9(logC)1/3(loglogC)2/3})O(C)
DW

"ছোট এবং জন্য" দ্বিতীয় পদ্ধতিটি আরও ভালভাবে সম্পাদন করে যে বিবৃতিটি সঠিক নয়। এটি কেবলমাত্র হলে আরও ভাল পারফর্ম করে । সুতরাং বড় হতে দ্বিতীয় পদ্ধতি ভালো (ছোট নয়) সঞ্চালন করার জন্য প্রয়োজন। সি এন nCএনnC/log(C)n
DW

@ ডিডাব্লু আপনি ঠিক বলেছেন, আমি জিএনএফএসের জটিলতা সম্পর্কে অবগত ছিলাম না।
লিওউ ভিঙ্কুইজজেন

উত্তর:


6

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

পূর্ণসংখ্যার গুণককরণের জন্য দুটি অ্যালগরিদম রয়েছে যা এখানে প্রাসঙ্গিক:

  • জিএনএফএস চলমান সময় সাথে পূর্ণসংখ্যার তৈরি করতে পারে ।হে ( এল সি [ 0.33 , 1,92 ] )CO(LC[0.33,1.92])

  • ইসিএম চলমান সময় সহ একটি উপাদান (যদি বিদ্যমান থাকে) খুঁজে পেতে পারে ; সমস্ত উপাদান সন্ধান করতে যতক্ষণ সময় নেবে (যা ইসির চলমান সময়ের তুলনায় তুলনামূলকভাবে ছোট)।( এল এন লগ সি [ 0.5 , 1.41 ] ) ( লগ সি / লগ ( এন লগ সি ) )nlogCO(LnlogC[0.5,1.41])O(logC/log(nlogC))

এখানে ।Ln[α,c]=exp{c(logn)α(loglogn)1α}

চলমান সময়ের জন্য এটি একটি চমকপ্রদ বর্ণনামূলক অভিব্যক্তি, তবে গুরুত্বপূর্ণ সত্যটি হ'ল আপনি যে পদ্ধতিগুলি উল্লেখ করেছেন তার চেয়ে এটি দ্রুত। বিশেষত, y than এর তুলনায় অনেক ছোট , অর্থাত্ GNFS সমস্ত সম্ভাব্য কারণগুলির চেষ্টা করার চেয়ে অনেক দ্রুত । এছাড়াও তুলনায় অনেক ছোট , অর্থাত্, সম্ভাব্য সমস্ত কারণের চেষ্টা করার চেয়ে ECM অনেক দ্রুত ।LC[0.33,1.92]C এল এন লগ সি [0.5,1.41]nলগসিnলগসিCLnlogC[0.5,1.41]nlogCnlogC

সুতরাং, এই পদ্ধতির জন্য মোট চলমান সময়টি মোটামুটিভাবে , এবং এটি আপনার চেয়ে অসম্পূর্ণভাবে আরও ভাল প্রথম পদ্ধতি এবং তাত্পর্যপূর্ণভাবে আপনার দ্বিতীয় পদ্ধতির চেয়ে ভাল। আরও ভাল করে করা সম্ভব কিনা জানি না possibleO~(nmin(LC[0.33,1.92],LnlogC[0.5,1.41]))


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

ইসিএম আপনার দেওয়া সময়টির একটি কারণ খুঁজে বের করে । যদি কোনও সংখ্যার সমস্ত উপাদান log n লগ সি হয় তবে আপনাকে সি / লগ (এন লগ সি) বার লগ করতে অ্যালগরিদম পুনরাবৃত্তি করতে হবে।
gnasher729

3

সর্বনিম্ন সাধারণ অবিভাজকটি এন লগ সি-এর মতো বৃহত্তর হতে পারে তবে এন সংখ্যাগুলি এলোমেলোভাবে বিতরণ করা হয় তবে কমপক্ষে সাধারণ অবিভাজক সম্ভবত অনেক ছোট, সম্ভবত এন এর চেয়ে অনেক কম which প্রাইমগুলি কোন সংখ্যার বিভাজক।

প্রতিটি প্রাইম সংখ্যা পি এর জন্য আমাদের একটি সূচক যার অর্থ সেই সূচী পর্যন্ত সমস্ত সংখ্যা পি দ্বারা বিভাজ্যতার জন্য পরীক্ষা করা হয়েছিল, এবং আমাদের সেই সংখ্যার একটি তালিকা রয়েছে যা দ্বারা বিভাজ্য ছিল।kp

তারপরে d = 2, 3, 4, ... এর জন্য আমরা d দ্বারা বিভাজ্য একটি সংখ্যা খুঁজে বের করার চেষ্টা করি, বা দেখায় কোনটি নেই। আমরা ডি এর বৃহত্তম প্রাইম ফ্যাক্টর গ্রহণ করি। তারপরে আমরা সমস্ত সংখ্যা যা পি দ্বারা বিভাজ্য ছিল তা চেক করে সেগুলি ডি দ্বারা বিভাজ্য কিনা whether যদি পাওয়া না যায়, তবে আমরা পি দ্বারা বিভাজ্যতার জন্য সূচকগুলি> সহ আরও নম্বরগুলি পরীক্ষা করব , আপডেট এবং পি দ্বারা বিভাজ্য সংখ্যাগুলির তালিকাটি পরীক্ষা করবো এবং প্রতিটি সংখ্যা ডি দ্বারা বিভাজ্য কিনা তা পরীক্ষা করে ।কে পিkpkp

পি দ্বারা বিভাজ্য সংখ্যা আছে কিনা তা পরীক্ষা করতে, আমরা গড় পি সংখ্যা পরীক্ষা করে দেখি। পরে যদি আমরা পরীক্ষা করে দেখি যে 2p দ্বারা বিভাজ্য সংখ্যা আছে কি না, 50% সম্ভাবনা রয়েছে যে আমাদের কেবল একটি সংখ্যা (পি দ্বারা বিভাজ্য একটি) পরীক্ষা করতে হবে, এবং গড় 2p আরও সংখ্যার উপর পরীক্ষার জন্য 50% সুযোগ রয়েছে। 3p দ্বারা বিভাজ্য একটি সংখ্যা সন্ধান করা সম্ভবত খুব দ্রুত এবং তেমনি, এবং আমরা পি দ্বারা বিভাজকগুলির জন্য N সংখ্যার চেয়ে বেশি কখনই চেক করতে পারি না, কারণ কেবল এন সংখ্যা রয়েছে।

আমি আশা করি এটি প্রায় বিভাজ্যতা পরীক্ষার সাথে কাজ করে।N2/logN

পুনশ্চ. এলোমেলো সংখ্যার জন্য ফলাফলটি কত বড় হবে?

ধরুন আমার কাছে এন এলোমেলো সংখ্যা রয়েছে। এন সংখ্যার একটির ডি দ্বারা বিভাজ্য সম্ভাবনা হ'ল 1 - (1 - 1 / d)) N আমি সম্ভাবনাটি ধরে নিয়েছি যে প্রতিটি সংখ্যার 1 ≤ d ≤ k এর যেকোন একটি এলোমেলো সংখ্যার একটি ফ্যাক্টর এই সম্ভাবনার গুণন করে গণনা করা হয় (ঠিক আছে, এটি কিছুটা ডজ্বি, কারণ এই সম্ভাবনাগুলি সম্ভবত বেশ স্বতন্ত্র নয়)।

এই অনুমানের সাথে, এন = 1000 এর সাথে, 50% সম্ভাবনা রয়েছে যে ১.২৪৪ সংখ্যার একটিতে কোনও সংখ্যা বিভাজিত হয় না এবং এক বিলিয়নে একটি যে প্রতিটি সংখ্যা ৫০ 50 অবধি একটিকে ভাগ করে দেয়। এন = 10,000 এর সাথে একটি 50% সম্ভাবনা রয়েছে যে ১.১.২726 সংখ্যাগুলির মধ্যে একটিতে কোনও সংখ্যা বিভক্ত হয় না এবং বিলিয়নে এমন একটি যা প্রতিটি সংখ্যা ২ 79 .৯ পর্যন্ত একটি সংখ্যাকে ভাগ করে দেয়।

আমি প্রস্তাব দেব যে এন এলোমেলো ইনপুটগুলির জন্য, ফলাফলের আকারটি এন / এলএন এন এর চেয়ে কিছুটা বড়; হতে পারে N / ln N * (ln ln N) something 2 এর মতো কিছু। কারণটা এখানে:

সম্ভাব্যতা যে এন র্যান্ডম সংখ্যার অন্তত একটি একটি র্যান্ডম ঘ দ্বারা বিভাজ্য হয় । যদি ডি এন এর আশেপাশে থাকে তবে প্রায় 1 - এক্সপ্রেস (-1) ≈ 0.6321। এটি একক বিভাজনের জন্য; সম্ভাব্য যে কয়েকটি সংখ্যার প্রত্যেকের ডি ≈ N হ'ল কমপক্ষে একটি এন সংখ্যার বিভাজক হ'ল যথেষ্ট পাতলা, তাই সর্বাধিক ডি এন এর চেয়ে উল্লেখযোগ্যভাবে ছোট হবে ces 1 - ( 1 - 1 / ডি ) এন1(11/d)N1(11/d)N

যদি ডি << এন হয়, তবে ।1(11/d)N1exp(N/d)

তাহলে ঘ ≈ n / n Ln তারপর ।1exp(N/d)1exp(lnN)=11/N

আমরা প্রায় N / ln N মান d এর জন্য এই সম্ভাবনাগুলি যুক্ত করব তবে বেশিরভাগ ক্ষেত্রে ডি ফলাফলটি উল্লেখযোগ্য পরিমাণে বড় হবে, তাই বৃহত্তম ডি N / ln N এর চেয়ে কিছুটা বড় তবে N এর চেয়ে উল্লেখযোগ্যভাবে ছোট হবে

পুনশ্চ. ডি দ্বারা বিভাজ্য একটি সংখ্যা সন্ধান করা:

আমরা ডি এর বৃহত্তম প্রাইম ফ্যাক্টর পি বাছাই করি এবং তারপরে আমরা প্রথমে পি দ্বারা বিভাজ্য হিসাবে পরিচিত ছিল এমন নম্বরগুলি পরীক্ষা করি। বলুন ডি = কেপি। তারপরে গড়ে আমরা কেবলমাত্র এই নির্দিষ্ট ডিটি পরীক্ষা করার সময় পি দ্বারা বিভাজ্য কে সংখ্যাগুলি পরীক্ষা করি এবং আমরা পি দ্বারা বিভাজ্যতার জন্য সমস্ত এন মানগুলি পি দ্বারা বিভাজ্য সকল ডি পরীক্ষা করে দেখতে পারি। প্রকৃতপক্ষে, আমরা বেশিরভাগ প্রাইম পি এর জন্য এন মানগুলির চেয়ে কম পরীক্ষা করি কারণ সমস্ত এন মানগুলি পরীক্ষা করার পরে অ্যালগরিদম সম্ভবত শেষ হয়। সুতরাং যদি ফলাফলটি আর হয় তবে আমি প্রত্যাশা করি যে এন মানগুলি প্রতিটি প্রধানের চেয়ে কম ভাগ করে নেওয়া হবে আর ধরে নিচ্ছেন আর ≤ এন ধরে নেওয়া, এটি প্রায় N ^ 2 / লগ এন চেকগুলি।

পুনশ্চ. কিছু পরীক্ষা চলছে

আমি এই অ্যালগরিদমটি কয়েকবার এন = 1,000,000 এলোমেলো সংখ্যার সাথে>> 0. কমপক্ষে সাধারণ অবিভাজকটি 68,000 এবং 128,000 এর মধ্যে ছিল যার মধ্যে 100,000 থেকে 120,000 এর মধ্যে বিশাল সংখ্যাগরিষ্ঠ ছিল। বিভাগগুলির সংখ্যা 520 মিলিয়ন এবং 1800 মিলিয়ন এর মধ্যে ছিল যা (এন / এলএন এন) less 2 এর চেয়ে অনেক কম; 1000 এবং 1500 মিলিয়ন বিভাগের মধ্যে ব্যবহৃত বেশিরভাগ ক্ষেত্রে।

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