Şimdi Ara

69,999. inci asal sayıya kadar sıralama yapan kod lazım :)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
14
Cevap
1
Favori
343
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 69,999. inci asal sayıya kadar sıralama yapan kod lazım :)

    1 ile 100 ARASINDAKİ ASAL SAYILAR:

    2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

    burada "97" 25. asal sayı olarak görülmektedir.

    istenilen 70,000. inci asal sayıya kadar sıralama yapan kod lazım :)



  • compoasso.free.fr
    List of prime numbers up to 1000000000000
    http://compoasso.free.fr/primelistweb/page/prime/liste_online_en.php


    Al buradan bak istediğin kadarına. Kopyala ve çok hızlı LUT olarak kullan. Sonrasında neye bakacaksan bak. Hesaplatarak işlemciyi yorma bari.
  • Sieve of eratosthenes en kolay ve hızlı yöntem. Python kodunu yazdım:

    asal = [1]*1000000
    asal[0], asal[1] = 0, 0

    for i in range(2,len(asal)):
    if asal[i] == 1:
    asal[i*i::i] = [0 for _ in range(len(asal[i*i::i]))]

    asal = [i for i in range(len(asal)) if asal[i] == 1][:69999]
  • Soru ne amaçlı? Sadece egzersiz mi yoksa yeni bir kripto algoritması falan geliştirirken kullanma amaçlı mı? Yeni bi algo geliştirme amaçlı sorulmuş olamaz cunku yeni algo geliştirecek kişi, işin temel bileşenlerini forumda sormaz, sorsa da bu sekilde ilerleyemez.

    @heren
    kod
    if asal == 1:
    IndexError: list index out of range
    hatası verdi.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • O satır "if asal == 1:" şeklinde. İndeksi silip "IndexError" hatasını tekrarlatayım dedim olmadı, kodlarda hafif kayma varma, tekrar ekleyeyim:


    asal = [1]*1000000
    asal[0], asal[1] = 0, 0

    for i in range(2,len(asal)):
    if asal[i] == 1:
    asal[i*i::i] = [0 for _ in range(len(asal[i*i::i]))]

    asal = [i for i in range(len(asal)) if asal[i] == 1][:69999]
  • Okey şimdi calıştı. Son satır en sola bitişik olmalıymış. Yanlız kodun ne yaptığı açıklamalı olsa daha iyi olurdu. Bu haliyle neyi nasıl yaptığı anlaşılmıyor bunda Python'un dizi gösterimindeki ayrıntıları unutmuş olmamın da etkisi var.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Kodlara basit açıklamalar ekledim. En önemli satır asal[i*i::i], i*i'den itibaren i'şer adımdaki her indeksi al demek (listeleri bu şekilde kullanmak hem zevkli hem de çok daha hızlı)

    # 1 milyonluk bir liste oluşturup hepsini asal olarak işaretle
    asal = [1]*1000000

    # 0 ve 1 asal değil
    asal[0], asal[1] = 0, 0

    # 2'den başlayarak tüm sayıları kontrol et
    for i in range(2,len(asal)):
    if asal[i] == 1:
    # eğer asalsa karesinden başlayarak her i adımdaki sayıyı 0 olarak işaretle (2 için 4,6,8,.., 3 için 9,12,15...)
    asal[i*i::i] = [0 for _ in range(len(asal[i*i::i]))]

    # asal sayı olarak kalmış indeksleri al
    asal = [i for i in range(len(asal)) if asal[i] == 1][:69999]

  • #include <stdio.h>
    #include <math.h>

    int isPrime(int n){
    int r=floor(n), f=5;
    if (n == 1)
    return 0;

    else if (n < 4)
    return 1;

    else if (n % 2 == 0)
    return 0;

    else if (n < 9)
    return 1;

    else if (n % 3 == 0)
    return 0;

    else
    r=floor(sqrt(n));

    f=5;
    while (f<=r){
    if (n % f == 0){
    return 0;
    break;
    }
    if (n % (f+2) == 0){
    return 0;
    break;
    }

    f=f+6;
    }
    return 1;
    }
    int main(){

    int P=10001 , count = 1 , c = 1;
    while(count != P){
    c=c+2;
    if (isPrime(c))
    count++;
    }
    printf(" %d ",c);
    return 0;

    }

    sanırım bundan daha hızlısı yok



    < Bu mesaj bu kişi tarafından değiştirildi I0SER_b0y -- 19 Ocak 2020; 19:36:29 >
  • I0SER_b0y kullanıcısına yanıt
    oradaki 25 tanımlamasını anlayamadım !?
  • kontrol et
  • I0SER_b0y kullanıcısına yanıt
    evet düzeltme yapmışsın ama kodlama fazla uzun gibi geldi !

    bunu daha basitleştirmek lazım.

    çünkü bu döngüler çok fazla defa tekrarlayacağı için

    daha az satır sayısı çok önemli diye düşünüyorum.
    https://www.mersenne.org/ sayfasında asal sayı sıralaması için şeklinde "2P-1" bir formülü var !

    ben bunu P^2-1(p) olarak okuyorum. tabi bunu programlamada nasıl ifade edilir bilmiyorum. :(

    cahilim işte :(



    < Bu mesaj bu kişi tarafından değiştirildi ProjectMan -- 19 Ocak 2020; 7:59:6 >
  • yazım olarak uzun olması degil calıstırma zamanı olarak bakmalısın orda sorgulaman gereken daha farklı sey var
  • I0SER_b0y kullanıcısına yanıt
    Konudaki ikinci mesajda bahsedilen Sieve of eratosthenes yöntemi daha hızlıdır muhtemelen
    Çünkü her sayı için tek tek birden çok kontrol yerine,
    Bottom up ile tabloyu 1 den başlayarak dolduruyor
    memory gerektirir, ama time complexity si daha azdır muhtemelen

    Siz 100000 den başlattığınız için belki siziki daha hızlı çalışıyordur, o yüzden kesin bir şey diyemiyorum

    https://www.geeksforgeeks.org/sieve-of-eratosthenes/

    < 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.