কীভাবে ডিজিট সামের সিক্যুয়েন্সের উপাদানটি দক্ষতার সাথে খুঁজে পাবেন?


20

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

ডিজিট সামের সিক্যুয়েন্সটি 1,2,4,8,16,23,28,38,49 .... যেখানে ক্রমের শব্দটি ক্রমের পূর্ববর্তী অঙ্কগুলির যোগফল । এই ক্রম পরিভাষা।nth1015th

নিষ্পাপ সমাধানটি কার্যকর করা যায় না কারণ এটি অনেক সময় নেয়। আমি সমস্যাটিকে ম্যাট্রিক্স এক্সপেনটেইনেশনের ক্ষেত্রে কমাতে চেষ্টা করেছি (এটি সময় লাগে ) তবে এই ক্রমটির পুনরাবৃত্তি হিসাবে লিনিয়ার মানদণ্ডের फिटिंग যেমন একটি পুনরাবৃত্তি আসতে পারে না বেশ অদ্ভুত দেখা যায় যে ক্রমটি পুনরাবৃত্তি দ্বারা পরিচালিত হয়:O(log(1015))

an=an1+d(an1).....(1)

যেখানে হয় ক্রম এবং মেয়াদের (। যেমন একটি ফাংশন যা যখন সংখ্যা ডিজিটের ইনপুট রিটার্ন সমষ্টি হিসাবে একটি প্রাকৃতিক নম্বর দেওয়া হয় )। আমার দ্বিতীয় পদ্ধতির ক্রমটি কিছু প্যাটার্ন সন্ধান করার চেষ্টা করা হয়েছিল। দেখা যাবে যে সিকোয়েন্সের প্রথম কয়েকটি পদ হিসাবে লেখা যেতে পারেannthdd(786)=21

   a_1 = 1  
   a_2 = 1 + d( 1 )
   a_3 = 1 + d( 1 ) + d( 1 + d( 1 ) )
   a_4 = 1 + d( 1 ) + d( 1 + d( 1 ) ) + d( 1 + d( 1 ) + d( 1 + d( 1 ) ) )
   a_5 = 1 + d( 1 ) + d( 1 + d( 1 ) ) + d( 1 + d( 1 ) + d( 1 + d( 1 ) ) ) + d( 1 +  d(  
   1 ) + d( 1 + d( 1 ) ) + d( 1 + d( 1 ) + d( 1 + d( 1 ) ) ) )

উপরের প্যাটার্ন থেকে এটি পরিণত হয় যে অনুক্রমের শব্দটি নিম্নলিখিত পদ্ধতি দ্বারা উত্পন্ন করা যেতে পারে:nth

  1. তাদের মধ্যে যোগ চিহ্ন সহ লিখুন ।2n1 1
  2. প্রথম রেখে , তার পরের পদগুলিতে ফাংশনটি প্রয়োগ করুন তারপরে পরবর্তী পদগুলিতে, তারপরে পরের পদগুলিতে এবং এই জাতীয় প্রয়োগ করুন।1d202122
  3. তারপরে উপরের পদ্ধতিটি প্রতিটি d ফাংশনের প্রয়োগের যুক্তিতে পুনরাবৃত্তভাবে প্রয়োগ করুন।

উদাহরণস্বরূপ যদি এন = 3 আমরা নিম্নলিখিত ম্যানিপুলেশনগুলি সম্পাদন করি:

    1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
    1 + d( 1 ) + d( 1 + 1 ) + d( 1 + 1 + 1 + 1 )
    1 + d( 1 ) + d( 1 + d(1) ) + d( 1 + d( 1 ) + d( 1 +d( 1 ) ) )

ডায়নামিক প্রোগ্রামিংয়ের মাধ্যমে আমি সময় এর উপরের পদ্ধতিটি ব্যবহার করে শব্দটি উত্পন্ন করতে পারি , যা আবার নিষ্পাপ সমাধানের চেয়ে ভাল নয়। O ( l o g ( 2nthO(log(21015))

সম্পাদনা 1
আরও একটি জিনিস যা লক্ষ্য করা যায় তা হ'ল । উদাহরণস্বরূপ । তবে আমি এই পয়েন্টটি ব্যবহার করতে অক্ষম। আমি আবার লিনিয়ার পুনরাবৃত্তি সম্পর্কটি অনুসন্ধান করার চেষ্টা করেছি (ম্যাট্রিক্স ক্ষয়ের জন্য), কিন্তু আমি এটি খুঁজে পাই না।d ( a 6 ) = d ( 23 ) = d ( 32d(an)=d(2n1)d(a6)=d(23)=d(32)=5

সম্পাদনা 2

নিম্নতর গ্রাফটি যখন ক্রমটি ছোট পরিসরের জন্য প্লট করা হয় (সিকোয়েন্সের প্রথম শর্তগুলি প্লট করা হয়)। 106এখানে চিত্র বর্ণনা লিখুন

PS: আমি জানি প্রকল্প ইউলারের কাছ থেকে সমাধান জিজ্ঞাসা করা উচিত নয়। তবে আমি কেবল একটি নতুন দিক বা একটি ইঙ্গিত চাই, কারণ আমি গত কয়েক দিন ধরে চেনাশোনাগুলিতে চলে আসছি। যদি এটি অগ্রহণযোগ্য হয় তবে আমি প্রস্তাবিত প্রশ্নটি সরিয়ে ফেলতে পারি।


1
আমি মনে করি যে You are given a106 = 31054319.মূল অলারের সমস্যাটি ইঙ্গিতযুক্ত।
ফিলিপ হাগলুন্ড

@ ফিলিপ হাগলুন্ড যা কোনও ইঙ্গিত নয়। একাকী নিষ্ঠুর দ্বারা আমি সহজেই সেই মানটি গণনা করতে পারি। এটি কেবল আপনার পদ্ধতির পরীক্ষা করার জন্য।
সাশা


@ এভিলজেএস হ্যাঁ আমি গ্রাফটি বর্ধিত করতে প্লট করতে পেরেছিলাম এটি ধীরে ধীরে একটি জিগ জিগ ফ্যাশনে বৃদ্ধি পায়। আপনি আপনার শেষ বিন্দু "সম্প্রসারিত গেল" ক্যাশে নিদর্শন .. "।
sashas

আকর্ষণীয় নিদর্শনগুলি 9 মডে প্রদর্শিত হবে তা দেওয়া, আমরা যদি সিকোয়েন্স মোড 11 বা Mod 99 তে তাকাই তবে আকর্ষণীয় কিছু ঘটে? মান মোড 11টি বিজোড়-সূচকযুক্ত অঙ্কগুলির যোগফল এবং সম-সূচকযুক্ত অঙ্কগুলির যোগফল থেকে নেওয়া যেতে পারে। সংখ্যার সংলগ্ন-জোড়-সংখ্যার যোগফল থেকে 99 মানের মানটি পাওয়া যায়।
ডিডাব্লিউ

উত্তর:


4

আপনার ক্রমটি oeis.org/A004207 এ অঙ্কের অঙ্ক হিসাবে বর্ণিত হয়েছে । সিকোয়েন্স মড 9 এর পুনরাবৃত্তি প্যাটার্ন রয়েছে এমন কিছু ভাল পয়েন্ট রয়েছে ty ইনফটি , এটি oeis.org/A065075 এবং oeis.org/A001370 এর সাথে ডিজিটাল শিকড়গুলি ভাগ করে । যদি এই বৈশিষ্ট্যগুলি কার্যকর হয় তবে ওপেন সমস্যা (কারণ সংখ্যাটির কোনও বন্ধ ফর্ম সমীকরণ নেই )। n - টি এইচ(1,2,4,8,7,5)nth

উল্লেখ করার মতো এই ক্রমের কয়েকটি বৈশিষ্ট্য রয়েছে:
আপনি যখন সংখ্যা গণনা করেন তখন আপনাকে কেবল কাউন্টারটি সংরক্ষণ করতে হবে (এটি কোন সংখ্যাটি ছিল তা জানার জন্য) এবং নিজেই সংখ্যাটি। পুনঃসূচনা করার জন্য আর কিছুই করার দরকার নেই, কারণ পরের সংখ্যাটি হ'ল এটির সংখ্যাগুলির সমষ্টি।nth

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

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

আমরা জানি যে দুটি সংখ্যার সাথে একই অঙ্কের সংখ্যার সাথে পরবর্তী সংখ্যাটি সংযোজন একই হবে। পরেরটির কী হবে?

Sasha

নীচে স্পিলার সতর্কতাটি বেশ স্পষ্ট ক্যাশে প্যাটার্ন

এটি অতিরিক্ত অবস্থার উপর নির্ভর করে, যে সংখ্যাগুলিতে রানের পরিবর্তন হয় না , আমি এটিকে শিফট বলব , শুরু হিসাবে পরিমাণ শুরু করব

কিছু অবাধ গ্রহণ রান মত, , এবং গ্রহণ শুরু থেকে থেকে আমরা পর্যন্ত শুরুর স্থান থেকে প্যাটার্ন ক্যাশে করতে , উপাদানের সংখ্যা (গণনা জানেন যে কাউন্টার, যা কিছু দিতে প্রয়োজন হয় সঙ্গে মোকাবিলা করার জন্য কিভাবে সংখ্যা ), এবং এটি মুখস্ত করুন। 0 9 100 এন - টি এইচ10009100nth

ঠিক আছে. এখন পর্যন্ত যে কোনও সূচনা কভার করা হয়নি, বাইরে কী পরিবর্তন হবে ? দুর্ভাগ্যবশত, এই নিদর্শন কাজ করা বন্ধ করে, কারণ আপনি থেকে চেষ্টা করে তৈরি শুরু সমান , পরবর্তী সংখ্যা পুরোপুরি গণনা করা, কিন্তু দ্বিতীয় বিরতি হয়। 100 1100
1001

এখানে আমাদের শিফট সেট কভার করতে হবে এবং সেট শুরু করতে হবে । এর অর্থ বিভিন্ন শিফটের জন্য সারণী গণনা করা । 010

আমাদের কি সত্যিই এই সমস্তগুলি গণনা করা দরকার ? আসলেই না, না।
টেবিলের অংশটি আরও একটি শুরু করার আইটেম।
উদাহরণস্বরূপ থেকে শুরু করে একই ক্রম স্থানান্তরিত হয়। তাহলে আমাদের কি আর লম্বা ক্যাশে গণনা করা দরকার? না, আমরা এটিকে অন্য রান বাছতে পরিবর্তন শিফট করতে গণনা করি , সুতরাং এটি প্রচুর স্মৃতি সঞ্চয় করবে। 1,2,4,8

এখন যখন টেবিলটি আচ্ছাদন করা হয়, আমরা প্রাথমিক সেটিংস থেকে শুরু করি, টেবিল থেকে সমষ্টিটি বেছে নেব, কাউন্টার যুক্ত করুন এবং দেখুন: থেকে আমরা , ভেরিয়েবলগুলি আপডেট করে যাই , -> -> -> ধাপগুলি পুনরাবৃত্তি করে -> -> -> -> । ঠিক আছে. এখন কি? 101 218 305 406 517 607 719 805 904 100311012183054065176077198059041003

শিফ্ট গণনার চেয়ে বেশি না হওয়া পর্যন্ত আমরা চালিয়ে যেতে পারি ।
আরও এগিয়ে যেতে আমরা উড়তে আরও বেশি রান গড়ে তুলতে পারি , বড় রানগুলি প্রাক্কলকুলেট করতে পারি বা অন্য কোনও নিদর্শন পর্যবেক্ষণ করতে পারি (যেমন আমরা ইতিমধ্যে গণনা করা টেবিলগুলিকে পার্টিয়ালি পুনরায় ব্যবহার করতে পারি)। মতো
বিভিন্ন শিফটে একবার দেখুন তারা সবাই অঙ্কের অঙ্কের জন্য একই পরিবেশ হিসাবে একই রান দেয়, তাই আমরা খুব একই টেবিলগুলি ব্যবহার করতে পারি। টিরও উপাদানের চেয়ে বড় টেবিল তৈরি করা প্রক্রিয়াটিকে আরও গতি দেয়, একবারে বড় বড় জাম্প তৈরি করে।100100,1000,10000,100000,1000000...
100


4

যেহেতু আপনি "একটি নতুন দিক বা একটি ইঙ্গিত" চেয়েছিলেন এবং আমি উত্তরটি জানি না, আমি এটি এখানে রেখে দেব, আশা করি এটি সহায়ক হবে helpful কিছু ধারণা:

এটি বুঝায় যে একটি প্যাটার্ন মড 9 হবে, যেহেতু

k>1,kZ10k1mod9

যা আপনি প্রবর্তন দ্বারা প্রমাণ করতে পারেন।

এর অর্থ হ'ল সমস্ত সংখ্যা তাদের 9 ডিজিটের সংখ্যার যোগফল।

আরও, an=d(an)mod9

an=an1+d(an1)=2d(an1)mod9

আমরা যদি এই পুনরাবৃত্তিটি প্রসারিত করে থাকি তবে আমরা পাই

an=2nmod9

যা প্যাটার্ন মোড 9 ব্যাখ্যা করে।

এটি আমাদের । প্রতিটি পুনরাবৃত্তি আমরা একটি ফাঁক পাই যা 9. দ্বারা বিভাজ্য those এই ফাঁকগুলি কত প্রশস্ত?an=9k+2n

এখানে সাধারণ কোডের চেয়ে কিছুটা কম:

import matplotlib.pyplot as plt
import numpy as np

#sum digits of n
def sum_digits(n):
    s = 0
    while n:
        s += n % 10
        n //= 10
    return s

#get the sequence to n digits
def calculate(n):
    retval = [1]
    for i in range(n):
        retval.append(retval[-1] + sum_digits(retval[-1]))
    return retval;

#empirically confirm that a_n = 2^n mod 9
def confirmPow2(a):
    count = 0
    for i in a[:10000]:
        if((i%9) != (2**count % 9)):
            print "false"
        count = count + 1

#find gaps divisible by 9 in a subset of a
def find9Gaps(a):
    count = 0
    S = []
    for i in a[:10000]:
         S.append(((2**count ) - i)/9)
         count = count + 1
    return S

#repeatedly sum the digits until they're less than 9...
#gives some interesting patterns
def repeatedDigitSum():
    for i in range(1000, 1100):
         print "=========for ",i
         while i > 9:
                 i = sum_digits(i)
                 print i 


a = calculate(10**6)
b = find9Gaps(a)
plt.plot(range(len(b[:100])), b[:100])
plt.show()

প্লটটি (প্রথম 100 এর জন্য) তাত্পর্যপূর্ণ দেখায়, তবে আমি এটি নিখুঁত বলে মনে করি না।

ফাঁক জন্য প্লট

এখানে আউটপুট

>>> plt.plot(range(len(b[5:60])), np.log2(np.array(b[5:60])))
>>> plt.show()

ফাঁকগুলির লোগারিথমিক প্লট

আমার কাছে শেষ কথাটি হ'ল মনে হচ্ছে আপনি যদি কোনও সংখ্যার অঙ্কগুলি যোগ করেন এবং তারপরে ফলাফলের সংখ্যার যোগফল যোগ করেন এবং পুনরাবৃত্তি করেন, আপনি শেষ পর্যন্ত সেই সংখ্যাটি 9 পেয়ে যান।

10 মড 9 এর ক্ষমতা সম্পর্কে উপরোক্ত সত্যকে প্রদত্ত ধারণাটি তৈরি করে।

nd(n)d(d(n))mod9

এটি সংখ্যার একটি আকর্ষণীয় ক্রম দেয় যদিও।

সম্পাদনা: স্পষ্টতই এটিকে একটি "ডিজিটাল রুট" বলা হয়।


1
এটি কমদামে কমপক্ষে তিনবার মন্তব্য করা হয়েছিল। এছাড়াও যখন আপনি এমন প্লট করেন যা আপনার কাছে ক্ষণীয় বলে মনে হচ্ছে, সম্ভবত আপনার লোগারিদম ব্যবহার করা উচিত, স্কেল অক্ষের উপর এটি সম্পর্কে অবহিত করবেন? আপনি যদি পাঠযোগ্য 10 ^ 16 টি শর্তের পরিকল্পনা করেন তবে আমি সত্যিই মুগ্ধ হব।
ইভিল

3 বার কি মন্তব্য করা হয়েছিল? লোকেরা বলছিল একটি "প্যাটার্ন মড 9" ছিল তবে আমার মনে হয়েছিল যে এটি কী তা পরিষ্কার নয়। আমি কেবল কিছু অন্বেষণ করেছি এবং আমার যা ছিল তা মন্তব্য করেছিলাম, যেহেতু আমি মনে করি না যে আমি এটি নিয়ে কাজ চালিয়ে যেতে সক্ষম হব। আবার, আমার কাছে কোনও সমাধান নেই, তবে প্রশ্নটির কোনও জিজ্ঞাসা হয়নি।
শান্তকন্টেস্ট

এভিলজেএসের পরামর্শ অনুসারে একটি লগ প্লট যুক্ত হয়েছে, কোনও বৃহত্তর প্লট করতে পারে না কারণ নম্পূর্ণ বিরতি ঘটে এবং আমার এই সমস্যাটি অনুসরণ করার সত্যই সময় পাই না
চুপচাপ প্রতিযোগিতা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.