একটি পূর্ণসংখ্যার মডুলো 100000000003 এর বিপরীত গণনা করুন


21

কাজটি নিম্নরূপ: একটি পূর্ণসংখ্যা দেওয়া x(যেমন যে xমডিউল 100000000003নয় সমান 0) আপনি সুবিধাজনক এটি কোন ভাবেই আপনার কোড উপস্থাপিত, আউটপুট অন্য পূর্ণসংখ্যা y < 100000000003যাতে (x * y) mod 100000000003 = 1।

আপনি কোডের জন্য একটি প্রমিত ডেস্কটপ মেশিনে চালানোর জন্য কম 30 মিনিট নিতে হবে কোন ইনপুট xযেমন যে |x| < 2^40।

পরীক্ষার মামলা

ইনপুট: 400000001. আউটপুট: 65991902837

ইনপুট: 4000000001. আউটপুট: 68181818185

ইনপুট: 2. আউটপুট: 50000000002

ইনপুট: 50000000002. আউটপুট: 2।

ইনপুট: 1000000. আউটপুট: 33333300001

বিধিনিষেধ

আপনি কোনও লাইব্রেরি বা বিল্টিন ফাংশনগুলি ব্যবহার করতে পারবেন না যা মডুলো গাণিতিক (বা এই বিপরীত ক্রিয়াকলাপ) সম্পাদন করে। এর অর্থ আপনি নিজেকে a % bপ্রয়োগ না করেও করতে পারবেন না %। তবে আপনি অন্যান্য সমস্ত নন-মডুলো পাটিগণিত বিল্টিন ফাংশনগুলি ব্যবহার করতে পারেন।

অনুরূপ প্রশ্ন

এটি এই প্রশ্নের অনুরূপ যদিও আশা করি এখনও আগ্রহের পক্ষে যথেষ্ট আলাদা।


সুতরাং ক- (ক / খ) * খ ভাল আছে?
— ব্যবহারকারী 253751

@ মিমিবিস ভাল লাগছে।

ট্যাগ: সীমাবদ্ধ কোড?
— ফিলিপ নারদী বাটিস্তা

1
বিশেষ কী 100000000003? (কেবল অবাক হয়ে)
— 21

1
@ ল্যাম্বিক সেই ক্ষেত্রে, আপনি কি সেই প্রয়োজনীয়তার বিষয়ে প্রশ্নে y <1000000000033 উল্লেখ করতে পারেন?
— isaacg

উত্তর:


16

পাইথ, 24 বাইট

L-b*/bJ+3^T11Jy*uy^GT11Q

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

এটি একটি ^ (p-2) মোড পি = a ^ -1 মোড পি এই সত্যটি ব্যবহার করে।

প্রথমে, আমি 100000000003 মোডের নির্দিষ্ট ক্ষেত্রে ম্যানুয়ালি মডিউলটিকে পুনরায় প্রতিস্থাপন করি I আমি সূত্রটি ব্যবহার করি a mod b = a - (a/b)*b, যেখানে /মেঝে বিভাগ রয়েছে। আমি 10^11 + 3কোডটি ব্যবহার করে মডিউলটি উত্পন্ন করি +3^T11, তারপরে এটি সংরক্ষণ করুন J, তারপরে বি মড 10000000000003 গণনা করতে এটি এবং উপরের সূত্রটি ব্যবহার করুন -b*/bJ+3^T11J। এই ফাংশন হিসাবে হিসাবে সংজ্ঞায়িত করা yহয় L।

এরপরে, আমি ইনপুট দিয়ে শুরু করি, তারপরে এটি দশম পাওয়ারে নিয়ে যাচ্ছি এবং 100000000003 মোড কমিয়ে আনুন এবং এটিকে 11 বার পুনরাবৃত্তি করুন। y^GTকোডটি কি প্রতিটি পদক্ষেপে সম্পাদিত হয় এবং uy^GT11Qএটি 11 বার ইনপুট দিয়ে শুরু করে।

এখন আমার আছে Q^(10^11) mod 10^11 + 3, এবং আমি চাই Q^(10^11 + 1) mod 10^11 + 3, তাই আমি ইনপুট দিয়ে গুন করব *, এটি yএকটি শেষ বার এবং আউটপুট দিয়ে 100000000003 এ Mod হ্রাস করুন ।


সত্যিই খুব সুন্দর!

আমি অনুমান করছি পরীক্ষার কেসগুলি আরও শক্ত করার জন্য আমার অনেক দেরি হয়ে গেছে ....

1
@ ল্যাম্বিক আমি এটি যাইহোক করব, তবে মতামত আলাদা হতে পারে। এটি আপনার চ্যালেঞ্জ, এটি আপনি যেভাবে চান তেমন কাজ করুন।
— isaacg

প্রশ্নটি যেভাবে লিখিত হয়েছে, আপনি চূড়ান্ত হ্রাস এড়াতে পারবেন, যদিও <<00000000003 ফলাফল প্রয়োজন কিনা তা আমি স্পষ্টতা চেয়েছিলাম।
— janrjan জোহানসেন

9

হাস্কেল , 118 113 105 101 বাইট

এই সমাধান থেকে অনুপ্রাণিত ।

-12 আরজান জোহানসেনের কাছ থেকে

p=10^11+3
k b=((p-2)?b)b 1
r x=x-div x p*p
(e?b)s a|e==0=a|1<2=(div e 2?b$r$s*s)$last$a:[r$a*s|odd e]

এটি অনলাইন চেষ্টা করুন!

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

একটি লেখা এই সমাধান । পরীক্ষার ভেক্টরের পক্ষে পর্যাপ্ত দ্রুত থাকা অবস্থায়, এই সমাধানটি অন্যান্য ইনপুটগুলির জন্য খুব ধীর।

s x=until(\t->t-t`div`x*x==0)(+(10^11+3))1`div`x

এটি অনলাইন চেষ্টা করুন!


অসাধারণ! স্কোয়ারিং পদ্ধতির মাধ্যমে আমি ক্ষুদ্রাকর্ষণটি পছন্দ করি।
— isaacg

সংক্ষিপ্ততম সমাধানটি অনলাইনে চেষ্টা করার মতো কিছু হবে! তবে আমি মনে করি না যে এটির অভিনয়টি গ্রহণযোগ্য ...
— বার্তাভেল

(1) এটা করতে খাটো এর gএকটি অপারেটর (e?b)a s|...(2) আপনি সুইচ aএবং sতারপর আপনি করতে পারেন !একটি অ -operator এবং ইনলাইন yতা। (3) আপনি সদৃশ ব্যয় whereকরে কোনও lastকৌশল দ্বারা ব্যয়বহুল থেকে মুক্তি পেতে পারেন z। এটি অনলাইন চেষ্টা করুন!
— janrjan জোহানসেন

এখন সেগুলি দুর্দান্ত কৌশল!
— বার্তাভেল

ওহ, এবং |e==0=aসেই উদ্বেগজনক সদৃশ থেকে মুক্তি পান।
— janrjan জোহানসেন

6

ব্র্যাচল্যাগ , 22 বাইট

∧10^₁₁+₃;İ≜N&;.×-₁~×N∧

এটি অনলাইন চেষ্টা করুন!

1000000কোডটির সামান্য ভিন্ন (এবং দীর্ঘতর) সংস্করণ সহ এটি প্রায় 10 মিনিট সময় নিয়েছিল যা ঠিক দ্বিগুণ দ্রুত ছিল ( İধনাত্মক এবং negativeণাত্মক উভয়ের পরিবর্তে কেবলমাত্র ইতিবাচক মানগুলি পরীক্ষা করেছে )। সুতরাং এই ইনপুটটির জন্য প্রায় 20 মিনিট সময় নিতে হবে।

ব্যাখ্যা

আমরা কেবল এটি বর্ণনা করি Input × Output - 1 = 100000000003 × an integerএবং Outputআমাদের জন্য সীমাবদ্ধ পাটিগণিতকে খুঁজে দিন ।

∧10^₁₁+₃                   100000000003
        ;İ≜N               N = [100000000003, an integer (0, then 1, then -1, then 2, etc.)]
            &;.×           Input × Output…
                -₁         … - 1…
                  ~×N∧     … = the product of the elements of N

আমাদের প্রযুক্তিগতভাবে সুস্পষ্ট লেবেলিংয়ের প্রয়োজন নেই ≜, তবে আমরা এটি ব্যবহার না করে কেসটি ~×পরীক্ষা করব না N = [100000000003,1](কারণ এটি প্রায়শই অকেজো) 2উদাহরণস্বরূপ, এটি উদাহরণস্বরূপ ইনপুটটির জন্য খুব ধীর হবে কারণ এটি দ্বিতীয় বৃহত্তম পূর্ণসংখ্যার সন্ধান করতে হবে প্রথমটির পরিবর্তে


1
বাহ, আমি কখনই সীমাবদ্ধ অঙ্কগুলি প্রত্যাশা করতাম না যে এটি বন্ধ করে দেওয়া। অসাধারণ!
— ইসাকাক

1
@ আইসাকগ এর গতি দুর্ভাগ্যক্রমে সম্পূর্ণরূপে এর মানের উপর নির্ভরশীল İ, তাই এটি বড় পণ্যগুলির জন্য এখনও বেশ ধীর।
— জালিয়াতি

প্রশ্ন আপডেট করেছেন। আপনার কোডটি সর্বদা 30 মিনিটেরও কম সময় নেয়?

6

পাইথন, 53 51 49 58 53 49 বাইট

-২ বাইট ধন্যবাদ অর্পলাইমকে ধন্যবাদ
-২ বাইট ধন্যবাদ
ফিলিপ নার্দি ব্যাটিস্ট
-৩ বাইট ধন্যবাদ আইসএএচজি
-১ বাইট ধন্যবাদ আর্জন জোহানসেন
-২ বাইট ধন্যবাদ ফেডারিকো পোলোনিকে

x=input()
t=1
while t-t/x*x:t+=3+10**11
print t/x

অনলাইনে চেষ্টা করে দেখুন!

এটি বের করতে আমার 30 মিনিট সময় লেগেছে। আমার সমাধানটি হ'ল প্রথম সংখ্যাটি দিয়ে শুরু করা যা মোডে 1 হবে 1. এই সংখ্যাটি ১ টি its যদি তা না হয় তবে এই সংখ্যাটিতে 10000000003 যুক্ত করে দ্বিতীয় সংখ্যাটি অনুসন্ধান করুন যা মোড 1000000003 1 সমান হবে এবং পুনরাবৃত্তি করবে।


প্রথম সংখ্যাটি 1 এ
— পরিবর্তিত

ধন্যবাদ এটি আমাকে 2 বাইট সংরক্ষণ করেছে :)
— জাচারি সুতি

মজার বিষয়, টিআইও-তে এটি সমস্ত পরীক্ষার ক্ষেত্রে দ্রুত, তবে কিছুটা এলোমেলো কীবোর্ড আমাকে পেছনে 421385994সময় দেয়।
— janrjan জোহানসেন

@ JanrjanJohansen ভাল সুথিং।

1
আপনার যদি bকেবল একবারের প্রয়োজন হয় তবে কেন এটি হার্ডকোডিং নয়?
— ফেডেরিকো পোলোনি

5

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

Math.stackexchange.com থেকে এই উত্তরটি দ্বারা অনুপ্রাণিত ।

ইউক্লিডিয়ান অ্যালগরিদমের উপর ভিত্তি করে একটি পুনরাবৃত্ত ফাংশন।

f=(n,d=(F=Math.floor,m=1e11+3,a=1,c=n,b=F(m/n),k=m-b*n,n>1))=>k>1&d?(e=F(c/k),a+=e*b,c-=e*k,f(n,c>1&&(e=F(k/c),k-=e*c,b+=e*a,1))):a+d*(m-a-b)

মডুলো গণনা দ্বারা প্রয়োগ করা হয়:

quotient = Math.floor(a / b);
remainder = a - b * quotient;

কারণ ভাগফলেরও প্রয়োজন রয়েছে, এটি সেভাবে করা আসলে কিছুটা অর্থবোধ করে না।

পরীক্ষার মামলা


আপনার কেবলমাত্র শেষ মুহূর্তে bit৪ বিট মেঝে প্রয়োজন যাতে আপনি অন্যান্য 0 0 x / y দিয়ে প্রতিস্থাপন করতে পারেন এবং ঘোষণাটি সরিয়ে ফেলতে পারেন
— ওকি

5

সি ++ 11 (জিসিসি / কলং, লিনাক্স), 104 102 বাইট

using T=__int128_t;T m=1e11+3;T f(T a,T r=1,T n=m-2){return n?f(a*a-a*a/m*m,n&1?r*a-r*a/m*m:r,n/2):r;}

https://ideone.com/gp41rW

অললফড, ইউলারের উপপাদ্য এবং বাইনারি ক্ষয়ক্ষতির উপর ভিত্তি করে।

using T=__int128_t;
T m=1e11+3;
T f(T a,T r=1,T n=m-2){
    if(n){
        if(n & 1){
            return f(a * a - a * a / m * m, r * a - r * a / m * m, n / 2);
        }
        return f(a * a - a * a / m * m, r, n / 2);
    }
    return r;
}

আইএসও সি ++ এর জন্য longকমপক্ষে কমপক্ষে 32-বিট থাকা দরকার, সুতরাং এটি প্রয়োজনীয়ভাবে ধরে রাখতে পারে না 1e11 + 3। এটি x86-64 উইন্ডোতে 32-বিট। longযদিও x86-64 লিনাক্সের (এবং অন্যান্য ওএসগুলি যা সিস্টেমভি এবিআই ব্যবহার করে) এ একটি 64-বিট টাইপ। সুতরাং পুরোপুরি পোর্টেবল হওয়ার জন্য, আপনাকে ব্যবহার করতে হবেlong long যা সি ++ 11 এর পরে কমপক্ষে 64৪-বিটের গ্যারান্টিযুক্ত ।
— পিটার কর্ডেস

__int128_tস্ট্যান্ডার্ড সি ++ বলে মনে হচ্ছে না, এটি একটি সিসি এক্সটেনশন বলে মনে হচ্ছে, আপনি যদি এটি ভাষা হিসাবে বর্ণনা করেন তবে এটি দুর্দান্ত হবে (সি ++ 11 + জিসিসি)।
— ফেলিক্স ডমব্যাক

3
এটি কোনও সি ++ বিশেষজ্ঞ সাইট হওয়ার কথা নয়, আমি আশা করি কেউই খেয়াল করবে না।
— স্টিলআরভেন

@ পিটারকর্ডস কোড গল্ফটির বহনযোগ্য বা এমনকি সু-গঠনের প্রয়োজন নেই, এটির জন্য কেবল একটি বাস্তবায়নে কাজ করা দরকার।
— Aschapler

1
@aschepler: আমি জানি, যার কারণে আমি বললাম "তুমি কি করবে প্রয়োজন"। আমি মনে করি যে এটি কোন প্লাটফর্মটি কাজ করবে না / তা কাজে লাগাবে না তা কার্যকরভাবে কার্যকর ছিল, যদি কেউ এটি চেষ্টা করে এবং সমস্যায় পড়ে তবে।
— পিটার

4

গণিত, 49 বাইট

x/.FindInstance[x#==k(10^11+3)+1,{x,k},Integers]&

এটি চালাতে কত সময় নেয়?

আমার কম্পিউটারে 0.001 এর চেয়ে কম (কেস 2 ^
— 40-1- এর জন্য


1

রুবি , 58 বাইট

আমি ব্রুট-ফোর্স সমাধানের সময় শেষ করার সময় আপাতত ফার্মেটের সামান্য উপপাদ্যের আইসাক্যাকের প্রয়োগ ব্যবহার করে।

->n,x=10**11+3{i=n;11.times{i**=10;i-=i/x*x};i*=n;i-i/x*x}

বর্তমান ব্রুট ফোর্স সংস্করণ, যা 47 বাইট তবে এটি খুব ধীর হতে পারে :

->n,x=10**11+3{(1..x).find{|i|i*=n;i-i/x*x==1}}

এটি অনলাইন চেষ্টা করুন!

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