Merhaba ve hoş geldiniz.
Bu konuda bir bilgi vermek istiyorum.
önceki zorluğumuza bir çözüm göstererek asal sayılar üreten
bir program yazmaktı.
Ve yine, bütün mesele Bu programın amacı bir dizi kullanmaktı, tüm dizileri
öğrenmek istiyorsunuz. diziler hakkında ve bunu yaparak.
Bu yüzden ben de Daha önce asal sayı algoritması.
Ama tekrar bahsetmek gerekirse, bir asal sayının asal sayı olup
olmadığını kontrol edebilirsiniz.
Asal sayı şu anlama gelir Başka bir asal sayıya
eşit olarak bölünemez.
Yani bu kavram algoritması ..bir şey yok.
Ve bu yüzden Çünkü asal olmayan herhangi bir tamsayı, asal bir sayı olarak ifade
edilebilir. asal çarpanların bir katı olarak.
Yani örneğin 20'de asal çarpanlar 2 2 ve 5.
Yani bunu bilmek size şunu söyler asal sayıların başka bir asal sayıya eşit
olarak bölünemeyeceği.
Yani bu çok yardımcı olabilir etkin asal sayı testi.
Yani yapabileceğin şey önceden üretilmiş asal sayıları
kontrol edebilir.
Böylece daha önce sakladığımız asal
sayıları bir dizide ürettik ve bu şekilde bu bilgiyi bulabilir.
Ayrıca herhangi bir 9 asal n tamsayısı 'den küçük olan bir tamsayıya sahip olan faktörlerinden
biri olarak n'nin kareköküne eşittir.
Bu da demek oluyor ki verilen bir tamsayının çift olup olmadığını test ederek
asal olup olmadığını belirlemek için tamsayının kareköküne kadar olan tüm asal çarpanlara
karşı bölünebilirlik.
Yani orada durabilirsin ve yine daha verimli hale getirir.
Bu fark edilebilir olacak atladığım zaman
iç döngümde bir asal sayı bulamadım.
Eğer atlayacak olursam tamsayının karekökü, esasen bir
çıkış koşuludur.
Öyleyse geçelim ve Bunu kontrol edebilmeniz
için p'nin asal sayılara bölündüğünü söylemeniz yeterlidir. asal alt-I'den büyüktür ve bunu en
içteki döngüde p değerinin asal I'nın karekökünü aşıp aşmadığını
test edin.
Öyleyse devam edelim ve kodu getirelim bloklarını kullanarak kod yazmaya başlayabilirsiniz.
Temel şeyleri yapacağız burada, bir proje oluşturun.
Projemize primes adını vereceğiz.
Şimdi yeni projeye
gidelim ve konsol uygulamasına geçelim.
Ve biz buna asallar adını vereceğiz.
Sıradaki söyle, biz gitmiyoruz bu derleyiciyi kullanmak için.
Etrafta oynuyordum doğru derleyiciye sahip olduğumdan emin
olmak istiyorum. sadece cygwin derleyicisini kullan.
Bu yüzden benim ana kaynak dosyası ve boş.
printf'ten kurtulalım ve biraz kod yazmaya başlayın.
Bir tane ekleyeceğiz standart bull adlı dosya.
Bunu henüz yapmadım. Boole'larımı alt çizgi olarak oluşturuyorum.
Küçük bir test yapalım, Bool yapabilmek istiyorum.
Yani artık bool kullanabiliriz.
Yani normalde C89'da veri tipi doğru veya yanlış için alt çizgi bool'dur.
Ama aslında bir türünüz olabilir tanımı daha sonraki sürümlerde ve standart bool dosyasında
sadece bool kullanır ve ayrıca değer olarak true false kullanmanıza
izin verir.
Bu yüzden biraz yaratmalıyız önce buradaki değişkenler.
Sayacımızı oluşturacağız ki biz buna sadece p diyeceğiz.
Bu bizim tezgahımız olacak. p'den 100'e kadar olan
sayıları kontrol ettiğimiz döngü için.
Bu bizim dış döngümüz olacak.
Aynı zamanda bir iç döngü sayacımız için değişken.
Burası kontrol ettiğimiz yer önceki asallarımız.
Aslında, onu başlatmayacağız burada döngü içinde başlatacağız.
Dizimizi oluşturacağız Bu da asal sayılardan oluşan bir tamsayı
olacak ve boyutu 50 olacaktır.
Ve biz başlatmayacağız şimdilik 0'dan başka bir şey değil.
Ve sonra da bir asal indeks ve bu da tüm çift sayılarımızı
atlamamıza yardımcı olacak ve bunu 2'ye ayarlayacağız.
Bu değişken aslında doğru indeksten başladığımızdan
emin olmak için ilk iki numarayı sabit kodlamak için.
İlk yapacağımız şey bu.
Sabit kodlama yapacağız ilk iki asal sayımız.
Yani diziye bu şekilde erişebiliriz.
Satırda nasıl dizi oluşturacağımızı biliyoruz 10'da, sadece veri türünü ve ardından
adı belirtirsiniz ve ardından köşeli parantezler boyutu belirtir.
Ve sonra başlatıyoruz her şeyi 0 olarak ayarlarsak, bu yapabileceğimiz
bir C99 özelliğidir.
Ve bir diziye veri atamak için, Sadece dizi adını ve ardından dizin değerini
söyleyebilirim.
Dizilerin 0 tabanlı olduğunu unutmayın.
Bu yüzden prime sub-0 diyeceğim.
Ve ilk asal 2 olacak.
2 ilk asal sayıdır.
İkinci asal sayı 3'e eşit olacak.
Bu şekilde bir miktar Ek asal sayıları
bulmak için önceden test edebileceğim sayılar.
Ve şimdi döngü geliyor.
Dışarıya ihtiyacımız olacak 5'ten 100'e kadar olan tüm sayıların
içinden geçen döngü.
4'ün asal sayı olmadığını biliyoruz O yüzden 5'ten başlıyorum.
Yani 4 p eşittir 5 diyebiliriz, p 100'den küçük veya eşit ve sonra çift sayıları
atlayacağız.
Yani diyeceğiz ki p, p artı 2'ye eşittir.
Herhangi bir sayıya bakmamıza gerek yok, Bu bizim dış döngümüz olacak.
Ve yine, sen olmalısın test ediyorsun.
Şimdi ayrıca olup olmadığını bize söyleyecek bir Boolean değişkeni
bir asal sayı bulduk.
İşte burada bool kullanabilirim, ve Boolean is prime adında
bir yerel değişken oluşturacağım.
Bunu başlatacağım doğru olduğunu söyleyeceğim, çünkü bunu yanlış olarak
ayarlayacağım önceden oluşturulmuş asal sayıların
tüm listesini veya En son asal sayıya bakıp karekök olmadığından emin olmalıyım.
Yani prime 2'yi atlayarak 5'ten 100'e kadar her iterasyon
için true değerine eşittir.
Şimdi benim iç döngüm daha önce ürettiğimiz tüm asal sayılar
aracılığıyla.
Daha da ileri gitmeyelim I'nın karekökünden daha büyüktür.
Bu yüzden, tüm bunların üzerinden geçeceğiz. kareköküne ulaşana kadar sayıları sıralarsak, bu bizim
x koşulumuz olabilir.
Biz de çıkacağız Eğer bir asal sayı bulursak.
Yani diyeceğiz ki eğer asal ise doğrudur ve limitimizi
aştık, ki bu da p alt-I asalına bölündüğünde, alt-I asalından büyük
veya ona eşittir.
Ve sonra artı artı I bizim döngü kontrol değişkenimizdir.
Bu gerçekten algoritmanın anahtarı.
Bu yüzden deneyeceğiz Çift sayıları atlayarak
5'ten 100'e kadar tüm asal sayılarımızı bulun.
Ve sonra iç döngümüzde 1'den başlayacağız,
ya 1'i ya da 2'yi ayarlayana kadar 'nin true değerine asal olması veya çıkış koşulumuza ulaşmış
olmamızdır. p sayısının asal alt-I'e bölümü asal alt-I'den büyüktür ve
bu esasen karekök bulduğumuzda yapmak için bitiyor çünkü bu algoritmanın
başka bir koşulu.
Bu bizim döngümüzse, içinde döngüsünde, aslında asal
sayıları kontrol edeceğiz.
Bir sayının asal olma şekli onu sayıya bölmektir.
Ve eğer bir 0, o zaman gitmeye hazırsın.
Yani sadece bir p mod yapabilirsiniz asal alt-I eşittir 0'a eşittir.
Ve eğer bu doğruysa, o zaman bir asal
sayınız yok demektir.
Yani ayarlayabilirsiniz Boolean false değerine eşittir.
Ve sonra yaptığımız şey bu tüm döngü için çünkü yaptığımız
tek şey Boolean'ı false olarak ayarlamak için.
Ve bu da bize bir asal sayı bulmak, bu yüzden asal sayılar
dizimize p eklemek istemiyoruz.
Tamam, yapılacak son şey Boolean'ın true olarak ayarlanıp ayarlanmadığını kontrol edin, eğer
true olarak ayarlanmışsa, dizimizi doldurmak istiyoruz.
Bunu diziye eklemek istiyoruz. Yani biz asal bulduğumuz dizilere ekliyoruz.
Bu yüzden sadece asal sayılar ve o zaman asal indeks diyoruz.
Çünkü, unutmayın, bu bir içine koymak istediğimiz yer için endeks
tarafından temsil edilir. Dizinin 2. indeksi olan 3. elemandan başlamak
istiyoruz.
Bu yüzden bunu bir yere koyduğumuzdan emin olmak istiyoruz. dizide doğru
nokta ve biz sadece p'ye ayarladık çünkü p asal sayıydı. bulduk çünkü bunun dış for döngüsü olduğunu unutmayın.
Kontrol etmeye çalışıyoruz. Bu bir asal sayı.
5'te başlıyoruz.
Eğer 5 asal olacaksa, eğer 1'den başlayarak bu sayılara gidebilir ve daha sonra herhangi bir sayı ile karşılaştırabiliriz.
önceki asal sayılar ve 0'a bölünemiyorsa, o zaman iyiyiz ve bunu her şey
için yapmak zorundayız.
Ve sonra son şey yapmak istediğimiz şey, sadece
bu asal indeksi artırmaktır.
Yani bir dahaki sefere bir asal bulduğumuzda doğru dizindeyiz.
İşte bu kadar.
Ve bu da tüm asal sayıları bulmak için algoritma.
Yani bunu kaydetmek ve Her şeyin yolunda olduğundan emin ol.
Biz iyiyiz.
Bu yüzden doğru yanlışı eklemeyi seviyorum değerlerine standart bool
ekleyerek, bunu unutmayın.
Ve sonra son şey Yapmamız gereken tek şey asal sayıların
çıktısını almak.
Böylece basit bir for döngüsüne sahip olabiliriz.
Ve onları basacağız hepsi aynı satırda, bu yüzden satır beslemesi
eklemeyeceğiz.
Yani yapacağımız şey döngü kontrol değişkenimizi
0 I olarak yeniden belirleyeceğiz.
Tüm yol boyunca gideceğiz dizideki her şeyin boyutu olacak
olan asal indeks ve sadece tek bir satırda, yüzde I
veya d ve asal alt-I olarak yazdırın.
Ve en sonunda, bir satır beslemesi ekleyeceğiz.
Noktalı virgülle bunun gibi bir şey.
Ama yine de, yapılacak şeyler Bu programa dikkat edin.
İlk olarak, girintiye dikkat edin, tüm bloklar girintilidir.
Bazen şu durumlarda parantez kullanırız bloklarımızın içinde
birden fazla ifade var, bazen de yok.
Satırdaki bu if deyiminde 25, hiç parantez kullanmadık.
For döngüleri şu hale gelmelidir Şimdiye kadar biraz ikinci doğa.
Gerçekten ne kazanmak istiyorsunuz? bu atama dizilerdir.
Bu yüzden primes adında bir dizi oluşturuyoruz, boyutunu 50 olarak ayarlar, her şeyi 0 olarak başlatır.
Ve sonra ilkini ayarlıyoruz 2 elemandan 2
ve 3'e ve sonra tüm bu algoritma 19'dan 32. satır, diziye bakarak asal olup
olmadığını belirliyor önceki asal sayılarda.
Ve ayrıca karekökten daha büyüktür.
Ve bu yüzden yine bir sürü dizilere erişmek ve değer atamak için burada
köşeli parantezler dizilere ve her şeye, oldukça
basittir.
Öyleyse bunu inşa edelim ve ne olacağını gör.
Hiçbir uyarı ya da hata yok.
Eğer bunu çalıştırırsak, ne görürsünüz çıktısı 100'e kadar
olan tüm asal sayılardır 2 3 5 7 11 13 17 19 23 29 31 37 41 43 vb.
Bunların hepsi asal sayılar.
Ve asal sayı öyle bir şeydir ki sadece kendi başına bir faktördü.
Bunu başka bir şeye bölemezsin. ve kalanı olmayan bir sayıdır.
Yani 97'de sadece 2 faktör 1 ve 97'dir.
Yani yine güzel, küçük, hızlı bir program.
Çözümü ben sağlayacağım.
Analiz edebilirsiniz.
Ama yine de önemli çıkarımlar, her şey diziler ve ayrıca kullandığım standart
bool hakkında, bu alt çizgi olmadan Boolean veri türleri
oluşturmamıza izin verdi b ve ayrıca 1 ve 0 yerine doğru yanlış
değerlerini kullanmanıza olanak tanır.
Umarım bu yardımcı olur. Teşekkür ederim.