SORU
8 Mayıs 2010, CUMARTESİ


Nasıl bir sayı olup olmadığını belirlemek için düzenli ifade ile bir başbakan?

RosettaCode Java aşağıdaki kod örneği buldum:

public static boolean prime(int n) {
  return !new String(new char[n]).matches(".?|(.. ?)\\1 ");
}
  • Özellikle Java ama normal ifadenin dışında bu parçacık tüm yönleriyle anlamak kendisi bilmiyorum
  • Bu yerleşik PHP fonksiyonları bulmak için Düzenli olarak temel-ileri bilgi için temel var

Nasıl .?|(.. ?)\\1 asal sayılar uyuşuyor mu?

CEVAP
8 Mayıs 2010, CUMARTESİ


Bu kısmı anladığını söylemiştin, ama sadece dikkat çekmek için oluşturulan bir Dize uzunluğu numarasını sağlanan eşit. Dize ve sadece n == 3 Eğer üç karakter var.

.?

Normal ifade ilk bölümü diyor ki, "herhangi bir karakter sıfır veya bir kere". Temelde yani sıfır veya bir karakteri var ya, yukarıda bahsettiğim ne başı, n == 0 || n == 1. Eğer maç yaparsak, o zaman yadsınması dönüş. Bu sıfır ve bir başbakan olmadığı gerçeğini yansıtmıyor.

(.. ?)\\1 

Normal ifade ikinci bölüm biraz daha zor, gruplar ve geribaşvuruların güveniyor. Bir grup daha sonra ve daha sonra kullanmak için düzenli ifade motoru tarafından çekilen saklanan parantez içinde bir şey vardır. A ile başlıyor, daha sonra aynı düzenli kullanılan uyumlu bir grup.

Grup 1 karakter yakalar, herhangi bir karakter 1 veya daha fazla. (Karakter veya daha fazla anlamına gelir, ama SADECE önceki karakter veya grubun. Yani bu "iki veya dört veya altı vb. değil "değil, "iki ya da üç vb." karakterler Bu ? gibi , ama mümkün olduğu kadar az karakterle eşleştirmek için çalışır. normalde çalışma başlıyor kısmını engellediği için kötü olan ise eğer bütün dize, silip süpürmek için bu durumda çalışır.)

Sonraki bölüm ile başlıyor: karakterler aynı seti (iki ya da daha fazla, yeniden ortaya. Başlıyor dedi görünür bir veya daha çok kez.

Bu yüzden. Yakalanan grup karakter doğal bir sayı (2 itibaren) yakalanan karşılık gelir. Dedi grup daha sonra zamanlarda bazı doğal sayı (2 itibaren de görünür. Eğer bir maç varsa, bu olası n uzunlukta bir dize maç iki sayıdan daha büyük veya eşit 2... bileşik bir n var, yani bir ürün bulmak anlamına gelir. Yani yine başarılı bir maç yadsınması dönüş: n asal DEĞİL.

Eğer bir eşleşme olabilir, o zaman olmaz ama bir ürününüz iki doğal sayılar sıfırdan büyük veya eşit 2... ve her ikisi de olmayan bir maç ve bir asal, dolayısıyla tekrar dönen inkarı maç sonucu.

Görüyor musun şimdi? İnanılmaz derecede zor (ve hesaplama açısından pahalı!) ama aynı zamanda çok basit, bunu aldıktan sonra. :-)

Eğer daha fazla soru, nasıl düzenli aslında çalışır gibi varsa ayrıntı verebilirim. Ama bu yanıt tutmaya çalışıyorum şimdilik basit (veya hiç de basit).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • michaeljacksonVEVO

    michaeljacks

    2 EYLÜL 2009