বিলের $ 1,000,000 নিতে দিন


17

বিলের ধারণা এক মিলিয়ন ডলার পুরষ্কার রয়েছে যদি আপনি তা প্রমাণ / অস্বীকার করেন।

এটিতে বলা হয়েছে যে A ^ x + B ^ y = C ^ zযেখানে যদি A, B, C, x, y এবং z এর x, y, z> 2 এর সাথে ধনাত্মক পূর্ণসংখ্যা হয় তবে A, B এবং C এর একটি সাধারণ মৌলিক কারণ রয়েছে।

চ্যালেঞ্জটি হ'ল একটি প্রোগ্রাম লিখুন যা এটিকে প্রত্যাখ্যান করার জন্য একটি পাল্টা উদাহরণ অনুসন্ধান করে!

বিধি

  • বিলের অনুমানের পাল্টা উদাহরণ অনুসন্ধান করার জন্য একটি প্রোগ্রাম লিখুন
  • আপনি একটি বিস্তৃত অনুসন্ধান (অর্থাত্ এই ফর্মের সাথে সংখ্যার সমস্ত সংমিশ্রণ সংমিশ্রণ) সম্পাদন করতে পারেন বা কিছু অপ্টিমাইজেশন ব্যবহার করতে পারেন (যেমন, এ এবং বি প্রতিসম হয়) are
  • আপনাকে অবশ্যই নির্বিচারে-নির্ভুলতা পূর্ণসংখ্যা ব্যবহার করতে হবে।

মন্তব্য

  • এটি জনপ্রিয়তার প্রতিযোগিতা, সৃজনশীল হোন!
  • গতি প্রয়োজনীয় নয়, তবে এটি আরও আকর্ষণীয় করে তোলে। নিখুত!
  • আমিও সংক্ষিপ্ততম কোডটি দেখতে আগ্রহী। আপনি আমার কাছ থেকে একটি +1 পাবেন!
  • আমি যে অ্যাক্সেস পেয়েছি এমন একটি কম্পিউটারে উইনিং প্রোগ্রামটি চালাব!
  • এই অনুমানটিকে সত্য বলে মনে করা হয়, তবে এর অর্থ এই নয় যে আমরা চেষ্টা করতে পারি না!
  • গুগলের পিটার নরভিগও এই সমস্যার চেষ্টা করেছেন। আপনি তার পৃষ্ঠা ব্যবহার করতে পারেন গাইডেন্স হিসাবে । তার একটি সংক্ষিপ্ত পাইথন প্রোগ্রাম রয়েছে যা আপনি উদাহরণ হিসাবে ব্যবহার করতে পারেন।
  • অন্য কিছু লোক (যিনি গুগলে কাজ করেও যান) নরভিগের পদ্ধতির উন্নতি ঘটেছে, তার পৃষ্ঠা (উত্স কোড সহ) এখানে পাওয়া যাবে
  • আমার এই সম্পর্কিত দুটি বছর আগে থেকে সম্পর্কিত প্রশ্নটিও সহায়ক হতে পারে: প্রদত্ত পরিসরে সমস্ত A ^ x ফিন করুন

1
সুপারকম্প্যুটার? এখন যে দুর্দান্ত। নগদ বিভাজনের কোনও সুযোগ?
Apuʎs

@ সিংহেতিকা এই অনুমানটি ইতিমধ্যে খুব, খুব, খুব বড় সংখ্যার সাথে পরীক্ষা করা হয়েছে তাই এটি বেশিরভাগ মজাদার জন্য। তবে অবশ্যই আমরা নগদ বিভক্ত করতে পারি :)
অস্টিন হেনলি

2
"এটি হয় চিরকাল অব্যাহত রাখা উচিত বা একটি সীমাবদ্ধ উপরের বাউন্ডকে অনুমতি দেওয়া উচিত (যত বড়ই হোক না কেন)" ... কোন বিকল্পের বিপরীতে?
আন্ডারগ্রাউন্ডোমোনাইল

কেবলমাত্র স্বল্প সংখ্যক জন্য কাজ করছে under
অস্টিন হেনলি

2
ছোট সংখ্যা একটি সীমাবদ্ধ উপরের আবদ্ধ।
আন্ডারগ্রাউন্ডোমোরাইল 21

উত্তর:


4

আমি করুণভাবে অলস হয়ে যাচ্ছি (পাং উদ্দেশ্যে), তবে কেন নয় ... মনে হচ্ছে নিয়মগুলি পূরণ হচ্ছে।

হাস্কেল, 204

import Control.Monad
import Control.Monad.Omega
main=print.filter(\[(a,x),(b,y),(c,z)] 
 ->and$(a^x+b^y==c^z):zipWith(((>1).).gcd)[a,b,c][b,c,a])
 .runOmega$mapM(\_->liftM2(,)(each[1..])$each[3..])"123"

এই ছাপে 1 সব সমন্বয় যা counterexample সম্পত্তি পূর্ণ করা। আমি কন্ট্রোল-মোনাড-ওমেগা প্যাকেজটি তির্যক ℕ 6 এর জন্য ব্যবহার করেছি ... এটি গ্রন্থাগার-প্রতারণা হিসাবে বিবেচনা করা যেতে পারে। তবে পরে কেউ এপিএলের উত্তর পোস্ট করবে যেখানে এই সমস্ত জিনিসগুলি ভাষায় তৈরি করা হয়েছে (বা তা নয়?), আমি এ সম্পর্কে খুব বেশি কিছু দিচ্ছি না ...

অবশ্যই, প্রোগ্রামটি খুব ধীরে ধীরে (নিঃশব্দ ক্লান্তি, এবং ডেটা স্ট্রাকচার হিসাবে সংযুক্ত-তালিকাগুলি) প্রকৃতপক্ষে প্রতিরূপ নমুনা অর্জনের প্রত্যাশাযোগ্য, তবে হাস্কেল নিজেই শালীন কার্য সম্পাদন করতে পারে।


1 যেহেতু এটি টিপলগুলি তালিকার বিন্যাসে মুদ্রণ করে, যেমন এক লাইনে, আপনাকে আপনার টার্মিনালের বাফারিং বন্ধ করতে হবে বা ফলাফল কখন আসবে তা আপনি দেখতে পাবেন না Al বিকল্পভাবে, আপনি এটির printসাথে প্রতিস্থাপন করতে পারেনmapM_ print যাতে আপনি প্রতিটি ফলাফল পর একটি newline পেতে, একটি লাইন-বাফার টার্মিনাল ফ্লাশ করছে।

প্রোগ্রামটি পরীক্ষা করতে, এতে পরিবর্তন each[3..]করুন each[2..], তারপরে আপনি কেবল ফলস্বরূপ সমস্ত নন-কপিরাইম পাইথাগোরিয়ান টিপল পাবেন।


2

সি #, কোনও লুপ নেই

ঠিক আছে, আমি এই লিঙ্কগুলির একটি বেশ কয়েকটি স্কিম করেছিলাম, তবে সত্যি বলতে কী তারা কিছুটা বিরক্তিকর ছিল। হ্যাশ টেবিল এবং হোয়াট নোটের সাহায্যে আমি এর থেকে নরকটিকে অপ্টিমাইজ করতে আগ্রহী নই। আমার কেন দরকার হবে? আপনি একটি গডড্যাম সুপার কম্পিউটার পেয়েছেন!

জাহান্নাম, আমি এমনকি লুপগুলি বিরক্ত করতে চাই না! এই সমাধানটি নো-লুপস বিধি অনুসরণ করবে

দয়া করে নোট করুন যে আমি যে কোডটি লিখতে চলেছি তা ভাল কোড নয়, বা আমি বাস্তবে যে জাতীয় কোড লিখতে চাইছি (যদি কোনও সম্ভাব্য নিয়োগকারীরা এটি পড়তে পারে)। এই কোডটি সংকীর্ণতা এবং একটি আখ্যানটিতে কাজ করার দক্ষতার উপর জোর দেয় এবং যথাযথ সম্মেলনগুলি এবং আচারগুলি এবং লুপগুলি বিবেচনা করে।

আমি যা বলছি তা প্রদর্শনের জন্য, আমরা সমীকরণটির অপারেশনগুলি সঞ্চয় করার জন্য পাবলিক ফিল্ডগুলির সাথে একটি শকিং ক্লাস দিয়ে শুরু করব:

class BealOperands
{
    public BigInteger A, B, C, x, y, z;
}

ঠিক আছে, আমরা সম্ভবত এটিই সবচেয়ে কঠিন চ্যালেঞ্জটি দিয়ে শুরু করব। আমাদের সেই অপারেশনগুলির প্রতিটি সংমিশ্রণের মধ্য দিয়ে ক্রমিট করার একটি উপায় বের করতে হবে। নিঃসন্দেহে প্রতিটি আদেশের পরীক্ষা করার চেয়ে আরও দক্ষতার সাথে এটি করার উপায় রয়েছে তবে আমি সেগুলি খুঁজে বের করে বিরক্ত করতে পারি না। আর কেন করব? আমরা একটি গডমডন সুপার কম্পিউটার পেয়েছি!

এখানে আমি এলগোরিদিমটি নিয়ে এসেছি। এটি অবিশ্বাস্যরূপে অদক্ষ, এবং একই অপারেশনগুলি বারবার ঘুরে দেখা যায়, তবে কে যত্ন করে? সুপারকম্প্যুটার!

  • ছয়টি অপারেন্ডকে বেস -২ নম্বর হিসাবে বিবেচনা করুন এবং প্রতিটি সংমিশ্রণের মাধ্যমে ক্রমবর্ধমান করুন।
  • ছয়টি অপারেন্ডকে একটি বেস -3 নম্বর হিসাবে বিবেচনা করুন এবং প্রতিটি সংমিশ্রণের মাধ্যমে ক্রম করুন।
  • ছয়টি অপারেন্ডকে বেস -4 নম্বর হিসাবে বিবেচনা করুন এবং প্রতিটি সংমিশ্রণের মাধ্যমে ক্রমবর্ধমান করুন।
  • (...)

লুপগুলি ছাড়াই কীভাবে এই সব করা যায়? সহজ! কেবল একটি বাস্তবায়ন করুন IEnumerableএবং IEnumeratorঅনুমতিগুলি পাম্প করার সাথে যুক্ত । পরে, আমরা এটি জিজ্ঞাসা করতে লিনকিউ ব্যবহার করব।

class BealOperandGenerator : IEnumerable<BealOperands>
{
    // Implementation of IEnumerable<> and IEnumerable -- basically boilerplate to get to BealOperandGeneratorEnumerator.
    public IEnumerator<BealOperands> GetEnumerator() { return new BealOperandGeneratorEnumerator(); }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); }
}

class BealOperandGeneratorEnumerator : IEnumerator<BealOperands>
{
    public BealOperandGeneratorEnumerator() { Reset(); }

    private BealOperands operands;
    private BigInteger @base;

    public void Reset()
    {
        // A is set to 0, which is "before" its minimum value, because IEnumerators are supposed to
        // point to their first element *after* the first call to MoveNext().
        // All other operands are set to their minimum values.
        operands = new BealOperands { A = 0, B = 1, C = 1, x = 3, y = 3, z = 3 };
        @base = 2;
    }

    public BealOperands Current
    {
        get 
        {
            // We need to return a copy, since we'll be manipulating our internal one.
            return new BealOperands { 
                A = operands.A, B = operands.B, C = operands.C, 
                x = operands.x, y = operands.y, z = operands.z };
        }
    }

    public bool MoveNext()
    {
        // Increment the lowest "digit" and "carry" as necessary.
        operands.A++;
        if (operands.A - 1 >= @base)
        {
            operands.A = 1; operands.B++;
            if (operands.B - 1 >= @base)
            {
                operands.B = 1; operands.C++;
                if (operands.C - 1 >= @base)
                {
                    operands.C = 1; operands.x++;
                    if (operands.x - 3 >= @base)
                    {
                        operands.x = 3; operands.y++;
                        if (operands.y - 3 >= @base)
                        {
                            operands.y = 3; operands.z++;
                            if (operands.z - 3 >= @base)
                            {
                                operands.z = 3; @base++;
                            }
                        }
                    }
                }
            }
        }
        // There will always be more elements in this sequence.
        return true;
    }

    // More boilerplate
    object System.Collections.IEnumerator.Current { get { return Current; } }
    public void Dispose() { }
}

এখন আমরা ব্যবসা করছি! আমাদের যা করতে হবে তা হ'ল BealOperandGeneratorবিলের অনুমানের একটি পাল্টা নমুনা খুঁজে বের করা।

আমাদের পরবর্তী বড় সমস্যাটি হ'ল এটির BigIntegerশক্তি বাড়ানোর কোনও অন্তর্নির্মিত উপায় বলে মনে হচ্ছে না BigInteger। অন্যটির ক্ষমতায় মডেলো অনন্তের শক্তি বাড়ানোর জন্য BigInteger.Pow(BigInteger value, int exponent)এবং আছে BigInteger.ModPow(BigInteger value, BigInteger exponent, BigInteger modulus)তবে কোনও পদ্ধতি বাড়াতে BigIntegerপারে না BigInteger

কি সমস্যার চকচকে নখ! দেখে মনে হচ্ছে এটি আমাদের IEnumerable/ IEnumeratorহাতুড়ি দিয়ে সমাধান করা হয়েছিল !

class BigIntegerPowerEnumerable : IEnumerable<Tuple<BigInteger, BigInteger>>
{
    public BigIntegerPowerEnumerable(BigInteger @base, BigInteger exponent) { this.@base = @base; this.exponent = exponent; } 
    BigInteger @base, exponent;

    public IEnumerator<Tuple<BigInteger, BigInteger>> GetEnumerator() { return new BigIntegerPowerEnumerator(@base, exponent); }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); }
}

class BigIntegerPowerEnumerator : IEnumerator<Tuple<BigInteger, BigInteger>>
{
    public BigIntegerPowerEnumerator(BigInteger @base, BigInteger exponent) 
    {
        originalBase = @base; 
        originalExponent = exponent;
        Reset(); 
    }

    BigInteger originalBase, currentBase, originalExponent, currentExponent;
    bool finished;

    public void Reset()
    {
        // IEnumerable.Reset() is a silly method. You're required to implement it when you implement IEnumerable,
        // but it isn't used by foreach or LINQ or anything. If you want to re-enumerate the enumerable, just get
        // a brand new enumerator.
        // In this case it gets in the way. The only reason I'm storing the original values is so I can implement 
        // this useless method properly. I supposed I could just throw a NotImplementedException or something, 
        // but it's done now.
        currentBase = originalBase;
        currentExponent = originalExponent;
        finished = false;
    }

    public bool MoveNext()
    {
        if (finished) return false;

        if (currentExponent <= Int32.MaxValue)
        {
            currentBase = BigInteger.Pow(currentBase, (Int32)currentExponent);
            currentExponent = 1;
            finished = true;
        }
        else
        {
            currentBase = BigInteger.Pow(currentBase, Int32.MaxValue);
            currentExponent -= Int32.MaxValue;
        }
        return true;
    }

    public Tuple<BigInteger, BigInteger> Current
    {
        get { return new Tuple<BigInteger, BigInteger>(currentBase, currentExponent); }
    }

    object System.Collections.IEnumerator.Current { get { return Current; } }
    public void Dispose() { }
}

static class BigIntegerPowExtension
{
    public static BigInteger Pow(this BigInteger @base, BigInteger exponent)
    {
        return new BigIntegerPowerEnumerable(@base, exponent).Last().Item1;
    }
}

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

ঠিক আছে, ফিরে আসা যাক। কোনও বিশেষ BealOperandsলোক বিলের অনুমানের পাল্টা নমুনা কিনা তা আমরা কীভাবে বলতে পারি ? ঠিক আছে, দুটি বিষয় সত্য হওয়া দরকার:

  • অপারেন্ডগুলি, যখন পৃষ্ঠার শীর্ষে সেই সূত্রটিতে প্লাগ ইন করা হয় তখন অবশ্যই একটি সত্য সমীকরণ গঠন করতে হবে।
  • A, B, এবং C এর অবশ্যই একটি সাধারণ প্রধান উপাদান নেই (অর্থাত্ তাদের জিসিডি 1)।

প্রথম শর্তটি যাচাই করার জন্য আমাদের যা প্রয়োজন তা আমরা পেয়েছি। এবং এটি দেখা যাচ্ছে যে দ্বিতীয় শর্তটি শোনার চেয়ে চেক করা অনেক সহজ। BigIntegerএকটি সুন্দর সরবরাহ করেGreatestCommonDivisor পদ্ধতি সরবরাহ করে, যা লুপগুলি ছাড়াই এটি বাস্তবায়নের চেষ্টা করার পুরো দুঃস্বপ্নকে আমাদের সুবিধামতভাবে পাশ কাটাতে দেয়।

সুতরাং আমরা BealOperandsএকটি কাউন্টারিক নমুনা কিনা তা পরীক্ষা করার জন্য একটি পদ্ধতি লিখতে প্রস্তুত । এখানে যায় ...

static class BealOperandsExtensions
{
    public static bool IsBealsConjectureCounterExample(this BealOperands o)
    {
        // If the equation isn't even true, we don't have a counter example unfortunately
        if (o.A.Pow(o.x) + o.B.Pow(o.y) != o.C.Pow(o.z))
        {
            return false;
        }

        // We have a counterexample if A, B and C are coprime
        return BigInteger.GreatestCommonDivisor(o.A, o.B) == 1 &&
               BigInteger.GreatestCommonDivisor(o.A, o.C) == 1 &&
               BigInteger.GreatestCommonDivisor(o.B, o.C) == 1;
    }
}

এবং অবশেষে আমরা এটির পরিবর্তে এই চটজলদি Mainপদ্ধতিতে এটি একসাথে আনতে পারি :

static class Program
{
    static void Main()
    {
        var bealOperandGenerator = new BealOperandGenerator();
        if (bealOperandGenerator.Any(o => o.IsBealsConjectureCounterExample()))
        {
            Console.WriteLine("IN YOUR FACE, BEAL!");
        }
    }
}

2

সি ^ জেড <= 1.0E27 এর সাথে কোনও পাল্টা উদাহরণ নেই।

ফেব্রুয়ারী ২০১২-তে আমি "X" এবং / অথবা "Y" এক্সপেনশনটি অবশ্যই = = 5 হওয়া উচিত এই ধারণায় C ^ Z <= 1.0E29 এ যাচাই করছি।

এই প্রোগ্রামটির বর্তমান সংস্করণ ("এক্স" এবং / অথবা "ওয়াই"> = 5) সি ^ জেড <= 1.0E15 এর সমস্ত সমাধান খুঁজে পেতে একটি এএমডি 2920X এ 1 সেকেন্ডেরও কম সময় নেয়। (তবে সমস্ত সিসিডি (এ, বি, সি) হ'ল = =)

Http://www.durangobill.com/BealsConjecture.html এ বিশদ

আমি এই সীমা ছাড়িয়ে বর্তমান কোড ("সি" এবং ওপেনএমপি ব্যবহার করে) সংশোধন করতে পারি তবে এটি চালানোর জন্য আরও 128 জিবি র‌্যামের প্রয়োজন হবে will (কয়েকশো সিপিইউও সহায়তা করবে Thousands হাজার হাজার সিপিইউ আরও ভাল হবে)) (যদি আপনার এইরকম কিছুতে অ্যাক্সেস থাকে তবে দয়া করে আমার সাথে যোগাযোগ করুন))

আমার ইমেল ঠিকানাটি আমার হোম পেজে http://www.durangobill.com এ রয়েছে


1
যদি আপনি কিছু কোড দিয়ে এটিকে বের করে দিতে পারেন তবে এটি একটি বৈধ উত্তর হতে পারে, অন্যথায় এটি সম্ভবত প্রশ্নের মন্তব্য হিসাবে সবচেয়ে উপযুক্ত। তবে আপনি যেভাবেই কাজটি করেছেন তা চিত্তাকর্ষক।
ousurous

অনেক বিশ্ববিদ্যালয়ে উচ্চ-কর্মক্ষমতা ক্লাস্টার রয়েছে। আপনি যদি কারও কাছে পৌঁছে যান তবে তারা আপনাকে অ্যাক্সেস দিতে সক্ষম হতে পারে। আমি অনেকগুলি ক্লাস্টারকে কেবল অলসভাবে দেখেছি!
অস্টিন হেনলি

1

বিলের অনুসন্ধানের প্রোগ্রামের ২ য় প্রকরণটি শেষ হয়েছে। ফলাফলগুলি হ'ল:

সিজেড<1026একজনএক্স+ +বিওয়াই=সিজেড(এক্স,ওয়াই)> =4

(এক্স,ওয়াই)> =5সিজেড<1028একজনএক্স+ +বিওয়াই=সিজেড(এক্স,ওয়াই)> =5

বিশদটি এখানে: http://www.durangobill.com/BealsConjecture.html

পরবর্তী দুটি প্রশ্ন হ'ল: ১) কোনও সুপার কম্পিউটার কি অনুসন্ধান বাড়িয়ে দিতে পারে? 2) কোনও সুপার কম্পিউটার যদি অনুসন্ধানটি প্রসারিত করতে পারে, তবে এটি কি ব্যবহারিক হবে?

1) উপরের যে কোনও অনুসন্ধানকে 1.0E30 পর্যন্ত প্রসারিত করার জন্য কোর প্রতি 300 গিগাবাইট র‌্যামের প্রয়োজন হবে যদি না কোর 300 গিগাবাইট ভাগ করতে না পারে। 1.0E30 ছাড়িয়ে এক্সফোনেনশিয়াল পাওয়ারে প্রতিটি অতিরিক্ত আরও বর্ধমান বৃদ্ধির জন্য, প্রয়োজনীয় র‌্যামের পরিমাণ কমপক্ষে 2.2 এর একটি ফ্যাক্টর দ্বারা বৃদ্ধি পায়।

2) 1.0E30 এবং এর বাইরে এক্সপেন্ডেন্টের প্রতিটি পরবর্তী ক্রমবর্ধমান বৃদ্ধির জন্য প্রয়োজনীয় প্রসেসিং পাওয়ার পরিমাণটি সম্মিলিত সিপিইউ সময়কে প্রায় 3.8 দ্বারা গুণ করে। 1.0E29 এ অনুসন্ধানে 12 টি কোর ব্যবহার করে 2 সপ্তাহ লেগেছিল। সুপার কম্পিউটারের সময়টি সাধারণত "ফ্রি" হয় না এবং এর কোনও পাল্টা উদাহরণ রয়েছে বলে খুব কম সম্ভাবনা রয়েছে।

Durangobill.com/BealE29code.txt এ কোডটির দক্ষতার জন্য গাইড হিসাবে, 12 টি কোরের প্রতিটি অভ্যন্তরীণ লুপের জন্য প্রতি সেকেন্ডে 220 মিলিয়ন লুপ পুনরাবৃত্তি করে। (গড়পড়তা ২ সপ্তাহের চালানোর জন্য।) (আমার যা আছে তার চেয়ে বেশি র‌্যামের স্মৃতিতে বৃদ্ধি এই গড় গতি ২ এর গুণক বাড়িয়ে তুলবে))

আমি অস্টিনকে উত্তর দেব 1) এবং 2) যেহেতু তার একটি সুপার কম্পিউটারে অ্যাক্সেস রয়েছে এবং আমি তা করি না। (যদি কোনও দূরবর্তী সুযোগে যদি 1) এবং 2 উভয়ই "গো" হয় তবে আমি "সি" কোডটি ক্যাভিয়েটের সাথে সরবরাহ করতে পারি যা আমি বড় সুপার কম্পিউটার কম্পিউটারগুলির জন্য বহু-থ্রেড নির্দেশনার সাথে পরিচিত নই not)


আপনি দয়া করে প্রশ্নের উত্তর কেবল তিনটিতে ছড়িয়ে দেওয়ার চেয়ে কেবল একটি উত্তরই ব্যবহার করতে পারেন? আপনি জানেন যে আপনি আপনার আগের উত্তরগুলি সম্পাদনা করতে পারেন, তাই না?
জো কিং

আমি প্রশংসা করি যে আপনি একটি পাল্টা নমুনা খুঁজে পেয়েছেন এবং তারপরে এটি মুদ্রণ করবেন না ... এছাড়াও এটি খুব কোড-গল্ফ নয় ...
অ্যাক্সমান 6

0

এটি ফিট করার জন্য এটি 2 টি মন্তব্যে রাখতে হয়েছিল।

প্রধান অ্যারেগুলি নিম্নরূপ বরাদ্দ করা হয়েছে:

SortHeads = calloc(PRIME1+1, 8);
X2YmodPrime1 = calloc(ARRAYSIZE+1, 4);
X2YmodPrime2 = calloc(ARRAYSIZE+1, 4);
Base = calloc(ARRAYSIZE+1, 4);
Power = malloc(ARRAYSIZE+1);

(এই অ্যারেগুলির জন্য আপনার 128 গিগাবাইট র‌্যামের প্রয়োজন হবে)

সঙ্গে:

#define PRIME1 2147483647LLU
#define PRIME2 2147483629LLU
#define ARRAYSIZE 4700000000LL

"বেস" আসলে 33 বিট প্রয়োজন ( cbrt(1.0E29)) - অতিরিক্ত বিট "পাওয়ার" এ স্টাফ করা হয় (যার জন্য কেবল 7 বিট প্রয়োজন))

অ্যারেগুলি হ্যাশ টেবিলের মতোই কাজ করে। তবে, যেহেতু এগুলি PRIME1 অনুসারে বাছাই করা হয় এবং কেবল চেহারা-সারণী হিসাবে ব্যবহৃত হয়, সেগুলি অ্যাক্সেস করার জন্য আপনার লিঙ্কযুক্ত তালিকার প্রয়োজন নেই। ফলশ্রুতিটি এইভাবে একটি অতি দ্রুত লৈখিক সময় অনুসন্ধান এটি পরীক্ষা A ^ X + B ^ Y = যে কোনও সি ^ জেড কিনা তা দেখার জন্য।

সুতরাং অন্তঃস্থলীয় লুপের বিবৃতিগুলি কেবল দুটি লুপের গভীর।

"প্রগমা" বিবৃতিগুলি ব্যবহৃত হয় এমন বহু মাল্টি প্রসেসিং কোরগুলির সংখ্যা নিয়ন্ত্রণ করে (এই ক্ষেত্রে 12) - সমস্ত অ্যারেগুলির একক অনুলিপি অ্যাক্সেস করতে পারে।

এখানে "মূল" কোডটি রয়েছে ("সি" তে) (আশা করি মন্তব্যগুলি পোস্ট করা লাইনের দৈর্ঘ্যের সাথে মানানসই। যদি তা না হয় তবে সেগুলি অনুলিপি করুন এবং কোডটি দীর্ঘতর লাইনের দৈর্ঘ্যযুক্ত এমন কোনও নথিতে পেস্ট করুন))


মন্তব্য বাক্সটি আমাকে কেবল 600 টি অক্ষর ব্যবহার করতে দেবে এবং কোডটির জন্য আমার 3,000+ প্রয়োজন। (কোনও পরামর্শ?) (আমি আমার ওয়েব পৃষ্ঠায় কোডটি এখানে পোস্ট করতে না পারলে পোস্ট করতে পারি))
বিল বাটার

আমি এখানে "মেইন" "সি" কোডটি রেখেছি। durangobill.com/BealE29code.txt অন্য কিছু না হলে এটি "সি" তে একাধিক থ্রেড প্রসেসিংয়ের জন্য "এটি কীভাবে করবেন" উদাহরণ।
বিল বাটলার

1
সাইটে স্বাগতম। মন্তব্য বাক্সগুলি 600 টি অক্ষরে সীমাবদ্ধ থাকলেও আপনার উত্তরটি নয়। আপনার উত্তরটিতে আপনার কোডটি সহজেই ফিট করতে সক্ষম হওয়া উচিত। আপনি যদি মন্তব্যগুলি ছাঁটাই করার চেষ্টা না করেন। এছাড়াও আমি কোড ব্লক ব্যবহার করতে আপনার উত্তর পুনরায় ফর্ম্যাট করেছি। এগুলি 4 টি স্পেস দিয়ে আমার মতো করা যায়। আপনি যখন নিজের কোডটি আপনার উত্তরে সরিয়ে ফেলেন তখন আপনাকে এটিকে একটি কোড ব্লকে রাখা উচিত বা এটি সম্পূর্ণ অপঠনযোগ্য।
পোস্ট রক গার্ফ হান্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.