এক-শূন্য লভ্যাংশ


28

চ্যালেঞ্জের বিবরণ

প্রতিটি ধনাত্মক পূর্ণসংখ্যার জন্য nএমন একটি সংখ্যা উপস্থিত থাকে যার রূপটি 111...10...000বিভাজ্য nঅর্থাত্ একটি দশমিক সংখ্যা যা সমস্ত দিয়ে শুরু হয় 1এবং সমস্তটির সাথে শেষ হয় 0। এটি প্রমাণ করা খুব সহজ: যদি আমরা (সকলের n+1আকারে ) বিভিন্ন সংখ্যার একটি সেট গ্রহণ করি , তবে তাদের মধ্যে কমপক্ষে দু'জন (কবুতরহোল নীতি অনুসারে) দ্বারা বিভাজনের পরে একই বাকী অংশটি দেবেন । এই দুটি সংখ্যার পার্থক্য দ্বারা বিভাজ্য হবে এবং পছন্দসই ফর্মটি থাকবে। আপনার লক্ষ্যটি এমন একটি প্রোগ্রাম লিখুন যা এই নম্বরটি খুঁজে পায়।111...1111nn

ইনপুট বিবরণ

একটি ধনাত্মক পূর্ণসংখ্যা।

আউটপুট বিবরণ

pআকারে একটি সংখ্যা 111...10...000, যেমনp ≡ 0 (mod n) । যদি আপনি একাধিক খুঁজে পান - সেগুলির মধ্যে যে কোনও একটি প্রদর্শন করুন (সবচেয়ে ছোট হওয়ার দরকার নেই)।

নোট

আপনার প্রোগ্রামটি একটি যুক্তিসঙ্গত সময়ে উত্তর দিতে হবে। যার অর্থ নিষ্ঠুরতা করার অনুমতি নেই:

p = 0
while (p != 11..10.00 and p % n != 0)
    p++

এটিও নয়:

do
    p = random_int()
while (p != 11..10.00 and p % n != 0)

আকারে সংখ্যাগুলির মাধ্যমে আইট্রেট করার 11..10..00অনুমতি রয়েছে।

আপনার প্রোগ্রামকে একটি নির্বিচারে বড় ইনপুট হ্যান্ডেল করার দরকার নেই - উপরের বাউন্ডটি আপনার ভাষার উপরের বাউন্ডটি যাই হোক না কেন।

নমুনা আউটপুট

2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110

আমরা কি সম্ভাব্য আউটপুট একটি যুক্তিসঙ্গত উপরের আবদ্ধ করতে পারেন? (প্রায় ২.৪ বিলিয়ন এরও কম কিছু (স্বাক্ষরিত পূর্ণসংখ্যার সর্বাধিক মান) সূক্ষ্ম হওয়া উচিত, কারণ কিছু বাস্তবায়নের জন্য অ্যারে বা তালিকার প্রয়োজন হতে পারে)
তমোগনা চৌধুরী

@ মার্টিনবাটনার আমি মনে করি যে প্রথম সন্তোষজনক আউটপুট যথেষ্ট হওয়া উচিত (যুক্তিসঙ্গত সময়সীমার সীমাবদ্ধতা)
তমোঘনা চৌধুরী

49 পরীক্ষার ক্ষেত্রে সর্বশেষ 0 প্রয়োজন হয় না।
ক্যালকুলেটরলাইন

@ ক্যাটস আরেফ্লুফি আমি মনে করি সমস্ত সংখ্যায় কমপক্ষে 1এবং কমপক্ষে একটি থাকা উচিত 0, অন্যথায় 0কোনও ইনপুটের সমাধান। (যদিও এটি স্পষ্ট করে বলা ভাল))
মার্টিন এন্ডার

প্রয়োজন অনুসারে 1কাজ করা উচিত।
ক্যালকুলেটরলাইন

উত্তর:


22

গণিত, 29 বাইট

⌊10^(9EulerPhi@#)/9⌋10^#&

মার্টিন বাটনার দ্বারা কোড ।

ইনপুটের nসঙ্গে, এই সংখ্যা আউটপুট 9*ϕ(n)দ্বারা অনুসরণ বেশী nশূণ্যসমূহ, যেখানে ϕহয় ইউলার totient ফাংশন । একটি ফাংশন সহphi , এটি পাইথন হিসাবে প্রকাশ করা যেতে পারে

lambda n:'1'*9*phi(n)+'0'*n

ফ্যাক্টরিয়ালটি ব্যবহার করা যথেষ্ট হবে n! পরিবর্তেϕ(n) , তবে মুদ্রণ যে অনেকের পক্ষে যুক্তিসঙ্গত রান-টাইম নেই।

দাবি: 9*ϕ(n) অনুসরণকারীগুলিn শূন্যগুলি একাধিক n

প্রুফ: প্রথমে আসুন এটি প্রমাণ করুন যেটি nএকাধিক নয় 2,3 অথবা 5। আমরা সমন্বয়ে থাকা সংখ্যাটি দেখাব ϕ(n)`n এর একাধিক।

সংখ্যাগুলির kসমান (10^k-1)/9। যেহেতু এর nএকাধিক নয় 3, এটি nযতক্ষণ 10^k-1তার গুণক nবা সমতুল্য যদি এটির একক হয়10^k = 1 (mod n) । মনে রাখবেন যে এই সূত্রটি স্পষ্ট করে তোলে যে যদি kএটির সংখ্যার জন্য কাজ করে তবে কোনও কোনও একাধিকটি এটিও করে k

সুতরাং, আমরা খুঁজছেন সেটি kএর গুণিতক হতে অর্ডার এর kমধ্যে গুণনশীল গ্রুপ মডিউল এন । দ্বারা Lagrange, উপপাদ্য , এমন কোন শৃঙ্খলা বাহিনীর আকারের একটি ভাজক আছে। যেহেতু দলের উপাদান থেকে সংখ্যা হয় 1থেকে nযে অপেক্ষাকৃত প্রধানমন্ত্রীর হয় n, তার আকার ইউলার totient ফাংশন ϕ(n) । সুতরাং, আমরা এটি প্রদর্শন করেছি 10^ϕ(n) = 1 (mod n)এবং তাই সংখ্যাটি তৈরি madeϕ(n) `n এর একাধিক।

এখন, সম্ভাব্য কারণের পরিচালনা করতে দিন 3মধ্যে n। আমরা জানি যে 10^ϕ(n)-1এটি একাধিক n, তবে (10^ϕ(n)-1)/9তা হতে পারে না। তবে এর (10^(9*ϕ(n))-1)/9একাধিক 9কারণ এটি এর সমন্বয়ে গঠিত 9*ϕ(n), সুতরাং এর সংখ্যার যোগফল একাধিক 9। এবং আমরা লক্ষ করেছি যে ঘনিষ্টর গুণকk ধ্রুবক দ্বারা ঘনিষ্ঠকে বিভাজ্যতা রক্ষা করে।

এখন, যদি nএর 2এর এবং এর উপাদান থাকে 5তবে আউটপুট শেষ করতে আমাদের শূন্য যুক্ত করতে হবে। এটি nশূন্যগুলি ব্যবহার করার জন্য পর্যাপ্ত পরিমাণের চেয়ে বেশি উপায় (আসলে তা log_2(n)করবে)। সুতরাং, যদি আমাদের ইনপুট nহিসাবে বিভক্ত করা n = 2^a * 5^b * m, এটা আছে যথেষ্ট 9*ϕ(m)এর গুণিতক হতে বেশী n, দ্বারা গুন 10^nএর গুণিতক হতে 2^a * 5^b। এবং, যেহেতু এর nএকাধিক m, এটি ব্যবহারের পক্ষে যথেষ্ট 9*ϕ(n)। সুতরাং, এটি জিরো 9*ϕ(n)অনুসরণ করে কাজ করে n


12
এই বিষয়টি নিশ্চিত করার জন্য যে কেউ আমার অনুমতি ব্যতীত এটি পোস্ট করা হয়েছে: xnor নিজেই পদ্ধতি এবং প্রমাণ নিয়ে এসেছিল, এবং আমি কেবল তাকে একটি গণিত বাস্তবায়ন দিয়েছিলাম, কারণ এটি একটি বিল্ট-ইন EulerPhiফাংশন রয়েছে। আসল বাস্তবায়নে মন খারাপ করার কিছু নেই, তাই আমি এটিকে পুরোপুরি তার নিজের কাজ বিবেচনা করব।
মার্টিন এন্ডার

9

পাইথন 2, 44 বাইট

f=lambda n,j=1:j/9*j*(j/9*j%n<1)or f(n,j*10)

যখন j10 এর মতো 1000 এর শক্তি হয়, তল-বিভাগ j/9111 এর মতো 1 এর তৈরি একটি সংখ্যা দেয় Soj/9*j দেয়

ফাংশনটি পুনরাবৃত্তভাবে এই ফর্মের সংখ্যাগুলি পরীক্ষা করে 10 এর উচ্চতর এবং উচ্চতর শক্তি চেষ্টা করে যতক্ষণ না আমরা খুঁজে পাই যে কাঙ্ক্ষিত সংখ্যার একাধিক।


1
ওহ, ভাল কথা, আমাদের কেবল 1 check n0 ^ n পরীক্ষা করা দরকার ...
মার্টিন এন্ডার

@ মার্টিনব্যাটনার যদি এটি আরও সহজ হয় তবে ইনপুট মান হিসাবে 0 এর সংখ্যা ঠিক করাও যথেষ্ট। যদিও এটি অনেকগুলি শূন্য মুদ্রণ করতে দক্ষ হিসাবে গণ্য হয়েছে তা জানেন না।
xnor

1 ^ n0 ^ n পরীক্ষা করা কেন কাজ করে?
লিন

5
@ লিন আরও শূন্য যুক্ত করা ক্ষতি করতে পারে না এবং অসম্ভব সম্ভাব্য সংখ্যক সংখ্যা রয়েছে, কিছু সংখ্যক জেরো এবং শূন্য উভয়েরই পর্যাপ্ত পরিমাণ থাকবে।
xnor

5

পাইথ, 11 বাইট

.W%HQsjZ`TT

পরীক্ষা স্যুট

মূলত, সংখ্যাটি ইনপুট দ্বারা বিভাজ্য না হওয়া পর্যন্ত এটি কেবল সামনে 1 এবং পিছনে 0 বার রাখে।

ব্যাখ্যা:

.W%HQsjZ`TT
                Implicit: Q = eval(input()), T = 10
.W              while loop:
  %HQ           while the current value mod Q is not zero
      jZ`T      Join the string "10" with the current value as the separator.
     s          Convert that to an integer.
          T     Starting value 10.

4

হাস্কেল, 51 বাইট

\k->[b|a<-[1..],b<-[div(10^a)9*10^a],b`mod`k<1]!!0

এক্সনোরের পদ্ধতির ব্যবহার। নিমাই একটা বাট বাঁচাল!


3

সিজেম, 28 25 19 বাইট

এক্সনোরের পর্যবেক্ষণের সাথে 6 বাইট সংরক্ষণ করা হয়েছে যে আমাদের কেবল ফর্মের সংখ্যার দিকে নজর দেওয়া দরকার ।1n0n

ri:X,:)Asfe*{iX%!}=

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

ri:X    e# Read input, convert to integer, store in X.
,:)     e# Get range [1 ... X].
As      e# Push "10". 
fe*     e# For each N in the range, repeat the characters in "10" that many times,
        e# so we get ["10" "1100" "111000" ...].
{iX%!}= e# Select the first element from the list which is divided by X.

2

ম্যাথামেটিকাল, 140 55 বাইট

NestWhile["1"<>#<>"0"&,"1",FromDigits@#~Mod~x>0&/.x->#]

Xnor এর 1 ^ n0 ^ n ট্রিকটির জন্য অনেকগুলি বাইট ধন্যবাদ সরিয়েছে।

সর্বনিম্ন মান, 140 156 বাইট এটি সবচেয়ে ছোট সম্ভাব্য সমাধান দেয়।

NestWhile["1"<>#&,ToString[10^(Length@NestWhileList[If[EvenQ@#,If[10~Mod~#>0,#/2,#/10],#/5]&,#,Divisors@#~ContainsAny~{2, 5}&],FromDigits@#~Mod~m>0&/.m->#]&

এটি গণনা করে যে কয়টি জিরো প্রয়োজন তা কার্যকর 1না হওয়া পর্যন্ত সমস্ত সম্ভাব্য গণনা পরীক্ষা করে। এটি 0 নম্বরের সাথে একটি সংখ্যা আউটপুট করতে পারে <>"0"তবে ফাইনালের আগে ডান যোগ করে এটি ঠিক করা যায় &


2

হাস্কেল, 37 বাইট

f n=[d|d<-"10",i<-[1..n*9],gcd n i<2]

এটি এটি ব্যবহার করতে কাজ করে এমন সত্যটি ব্যবহার করে 9*phi(n), যেখানে phiএলারের মোটামুটি কাজ রয়েছে। এখানে, এটি প্রয়োগ gcdএবং ফিল্টারিং প্রয়োগ করা হয়েছে , প্রতিটি মানের জন্য একটি ডিজিট তৈরি করে iযা অপেক্ষাকৃত প্রধান যে এটি সীমাতে 1এবং 9*n। এটি অনেকগুলি শূন্য ব্যবহার করার পক্ষে যথেষ্ট।


2

জাভাস্ক্রিপ্ট (ES6), 65 বাইট

সম্পাদন করা2 বাইট thx @ নীল

এটি 17 টি উল্লেখযোগ্য অঙ্ক সহ জাভাস্ক্রিপ্ট সংখ্যার ধরণের সীমাতে কাজ করে। (এতটা সীমাবদ্ধ)

a=>{for(n='';!(m=n+=1)[17];)for(;!(m+=0)[17];)if(!(m%a))return+m}  

কম গল্ফড

function (a) {
    for (n = ''; !(m = n += '1')[17]; )
        for (; !(m += '0')[17]; )
            if (!(m % a))
                 return +m;
}

1
কেন হবে না for(m=n;?
নিল

@ নীল কারণ আমার কমপক্ষে একটি শূন্য প্রয়োজন। সম্ভবত আমি একটি আরও ছোট উপায় খুঁজে পেতে পারি ... (সম্পাদনার জন্য thx)
edc65

ওহ, প্রশ্নটিতে এটি পরিষ্কার ছিল না, তবে আমি এখন দেখছি যে নমুনা আউটপুটগুলির সকলের কমপক্ষে একটি শূন্য রয়েছে। সেক্ষেত্রে আপনি এখনও একটি বাইট ব্যবহার করে সংরক্ষণ করতে পারেন for(m=n;!m[16];)if(!((m+=0)%a))
নিল

1
@ নীল বা এমনকি 2 বাইট Thx
edc65

1

পার্ল 5, 26 বাইট

এর জন্য একটি বাইট অন্তর্ভুক্ত -n( -M5.01বিনামূল্যে)

($.="1$.0")%$_?redo:say$.


0

বিসি, 58 বাইট

define f(n){for(x=1;m=10^x/9*10^x;++x)if(m%n==0)return m;}

নমুনা ফলাফল

200: 111000
201: 111111111111111111111111111111111000000000000000000000000000000000
202: 11110000
203: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000
204: 111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000
205: 1111100000
206: 11111111111111111111111111111111110000000000000000000000000000000000
207: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
208: 111111000000
209: 111111111111111111000000000000000000
210: 111111000000
211: 111111111111111111111111111111000000000000000000000000000000
212: 11111111111110000000000000
213: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
214: 1111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000
215: 111111111111111111111000000000000000000000
216: 111111111111111111111111111000000000000000000000000000
217: 111111111111111111111111111111000000000000000000000000000000
218: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
219: 111111111111111111111111000000000000000000000000

0

ডিসি, 27 বাইট

Odsm[O*lmdO*sm+O*dln%0<f]sf

এটি এমন একটি ফাংশন সংজ্ঞায়িত করে fযা ভেরিয়েবলের মধ্যে তার যুক্তিটি আশা করে n। এটিকে একটি প্রোগ্রাম হিসাবে ব্যবহার করতে, ?sn lfx pস্টিডিন থেকে পড়তে, ফাংশনটি কল করুন এবং ফলাফলটি স্টাডাউটে মুদ্রণ করুন। পরিবর্তনশীল mএবং স্ট্যাকের শীর্ষটি 10 ​​এ পুনরায় সেট করতে হবে (পুনরাবৃত্তি করে)Odsmf পুনরায় ব্যবহারের আগে অবশ্যই পুনরায় ) করতে হবে।

ফলাফল:

200: 111000
201: 111111111111111111111111111111111000000000000000000000000000000000
202: 11110000
203: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000
204: 111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000
205: 1111100000
206: 11111111111111111111111111111111110000000000000000000000000000000000
207: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
208: 111111000000
209: 111111111111111111000000000000000000
210: 111111000000
211: 111111111111111111111111111111000000000000000000000000000000
212: 11111111111110000000000000
213: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
214: 1111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000
215: 111111111111111111111000000000000000000000
216: 111111111111111111111111111000000000000000000000000000
217: 111111111111111111111111111111000000000000000000000000000000
218: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
219: 111111111111111111111111000000000000000000000000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.