Şimdi Ara

c++11 ve BigNum kullanarak 1-100 Milyar arası Leyland sayılarını listelemek

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
11
Cevap
0
Favori
234
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • c++11 ve Bignum ile 1-100 Milyar arası Leyland sayıları listeleyiniz

    Leyland sayıları tanım:

    c++11 ve BigNum kullanarak 1-100 Milyar arası Leyland sayılarını listelemek


    NOT: Ödev sorusu değildir, egzersiz ve sohbet amaçlı sorudur. Kod göndermeden, konuyla alakasız şekilde "öğretmen misiniz" "nereden mezunsunuz" "mesleğiniz nedir" tarzı sorular dikkate alınmayacaktır.

    Notlar

    1- Leyland sayılarını çıkarırken 2 - 32 arası sayılar kullanılacaktır. İpucu: 2-32 arası sayılar kullanıldığında 1-100 Milyar arasında 103 Leyland sayısı çıkmaktadır.

    2- c++11 derken c++1z yani c++11, c++14 ve c++17 den istediğinizi kullanabilirsiniz fakat c99 ve c++98 da sıkça görülen 'for' döngüleri yerine STL ve c++11 ve sonrasınnda sık görülen vector gibi veri yapıları ve algorithm.h 'deki fonksiyonel özellikler kullanmalısınız.

    3- Bignum kullanma sebebi Float veya Double gibi yerleşik tipler ile sonuçları 1.23456789E8 yerine 123456789 gibi doğal sekilde göstermekten cok, vector içinde Bignum kullanmak içindir (ve bu pek o kadar kolay değil ancak cok zor da değil)

    4- Online derleyici (Online compiled source code playground) kullanılabilir

    https://code.labstack.com/program
    https://www.intervue.io
    http://codepad.org
    https://paiza.io/en
    https://www.codiva.io
    http://www.compilr.com (Linked-in kapatmış)
    https://ideone.com
    https://www.onlinegdb.com
    https://repl.it
    https://rextester.com
    https://www.mycompiler.io
    https://dotnetfiddle.net (C#)



    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 29 Ekim 2020; 1:9:49 >
    < Bu ileti mini sürüm kullanılarak atıldı >







  • c# da böyle olabilir


    Kod

    Yığını:
    var liste = new List<BigInteger>(); for (int x = 2; x <= 32; x++) { for (int y = 2; y <= x; y++) { var leyland =BigInteger.Pow(x, y) + BigInteger.Pow(y, x); if (leyland<100000000000) { liste.Add(leyland); } } } liste.Sort(); Console.WriteLine(liste);
  • C# ta işler kolay. C++ 'ta yapsana :)

    Bu arada 'using' satırları nelerdir, online compiler 'da bir denemek için.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Simdi yattım Yarına bakarım system numerics olması lazımdı bigintegerın

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Gökşen PASLI G kullanıcısına yanıt
    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Linq;
    using System.Numerics;

    ekleyerek sorunsuz derledim fakat çalıştırdığımda sadece şu satır döndü:

    System.Collections.Generic.List`1[System.Numerics.BigInteger]

    .NET FW olarak mono-5.18 kullanıyorum ve derlemeyi de şu satırla yaptım:

    csc /out:"leyland-bignum.exe" "leyland-bignum.cs" -platform:x86 -lib:/c/Programs/mono-5.18.0.225/lib/mono/xbuild-frameworks/.NETPortable/v4.5 -reference:System.Numerics.dll

    Sorun benim derleme ortamımdan mı yoksa koddan mı kaynaklı acaba?

    < Bu ileti mini sürüm kullanılarak atıldı >
  • ben genelde linqpadı kullanıyorum c# test kodlarında ama bakarım standart derleyicilerde belkide öyle geliyordur sonuç ama linqpad farklı göstermiştir




    < Bu mesaj bu kişi tarafından değiştirildi Gökşen PASLI -- 27 Ekim 2020; 16:7:41 >
  • Gökşen PASLI G kullanıcısına yanıt

    Sanırım kodda hata var cunku aynı ortamda 'using System.Numerics' ve 'BigInteger'

    kullanan aşağıdaki kodu denedim sorunsuz çalıştı.

    Kod

    Yığını:
    using System; using System.Numerics; // 1000. fibonacci numarasını bas  namespace ddds {    class Program {    static   BigInteger[] f = new BigInteger[1000001];    public static BigInteger fib(int n)    {       if (n == 0)       return 0;       if (n == 1 || n == 2)       return (f[n] = 1);       if (f[n] != 0)       return f[n];       int k = (n & 1) == 1 ? (n + 1) / 2 : n / 2;       f[n] = (n & 1) == 1 ? (fib(k) * fib(k) +               fib(k - 1) * fib(k - 1))       : (2 * fib(k - 1) + fib(k)) *       fib(k);       return f[n];    }    public static void Main(string[] args)   {       Console.Write(fib(1000));    }    } } $ ./fibonacci.exe 43466557686937456435688527675040625802564660517371780402481729089536555417 94905189040387984007925516929592259308032263477520968962323987332247116164 2996440906533187938298969649928516003704476137795166849228875

    Linqpad 'ın .NET 4.7 versiyonunu indirdip kurdum Windows 7 'de, program hata verip kapandı.




    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 28 Ekim 2020; 10:2:38 >




  • değiştirdim linqpadde çalışanı


    C# Online Compiler | .NET Fiddle (dotnetfiddle.net)

  • Gökşen PASLI G kullanıcısına yanıt
    Evet şimdi doğru çalışıyor. C#'ta sevdiğim şey, güzel anılarımın olması. En cok para kazandığım iş C# işiydi ancak yorucuydu.

    Şimdi bu işi c++11 - 17 fonksiyonel özellikler ve GNU MP kütüphanesi kullanarak yapacak babayiğiti bekliyorum :)

    Not: Ben coktan yaptım :)



    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 28 Ekim 2020; 16:0:3 >
    < Bu ileti mini sürüm kullanılarak atıldı >
  • Ufak bir spoiler:
    Çözümün tamamı yok fakat çözüm yoluna dair ipuçları var.
    c++11 ve BigNum kullanarak 1-100 Milyar arası Leyland sayılarını listelemek

    < Bu ileti mini sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.