একটি পূর্ণসংখ্যার মডুলো 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.