Repunits'in Yeni Ana Faktörleri


20

Arkaplan

Millet sohbette asıl çarpanlara ayırma konusunu konuşuyordu ve biz de kendimizi tekrarlar hakkında konuşurken bulduk. Repunits , repdigits olarak bilinen ve yalnızca 222veya yinelenen rakamlardan oluşan sayılardan oluşan alt kümelerdir 4444444444444444, ancak repunitler yalnızca oluşur 1.

İlk birkaç repunits bu nedenle 1, 11, 111Bu olarak anılır, vb R , n , yani R 1 = 1, R 2 = 11vb, ve aşağıdaki formül ile oluşturulacak R(n) = (10^n - 1)/9olan n > 0.

Bu yeniden birleştirme sayılarının birincil çarpanlarına ayrılması , OEIS'deki A102380 sekansını takip eder. Örneğin:

R 1 = 1
R 2 = 11
R 3 = 111 = 3 * 37
R 4 = 1111 = 11 * 101
R 5 = 11111 = 41 * 271
R 6 = 111111 = 3 * 7 * 11 * 13 * 37
R 7 = 1111111 = 239 * 4649
...

Meydan okuma

Bir program ya da işlev Yazın olan bir giriş tamsayı verildiğinde n ile n >= 2ile STDIN veya eşdeğeri , çıkışlar veya getiriler yeni ana faktörleri R , n , herhangi bir uygun biçimde,. "Roman ana faktörler" Burada bütün anlamı xnerede xbir asal faktördür R n , ancak xönceki herhangi bir asal faktör değildir R k ile, 1 <= k < nhepimiz için asal çarpanlarını yazarsanız (yani R dizisindeki biz görmedim xönce).

Örnekler

Input: 6
Output: 7, 13
(because 3, 11, and 37 are factors of a smaller R_k)

Input: 19
Output: 1111111111111111111
(because R_19 is prime, so no other factors)

Input: 24
Output: 99990001
(because 3, 7, 11, 13, 37, 73, 101, 137, 9901 are factors of a smaller R_k)

Input: 29
Output: 3191, 16763, 43037, 62003, 77843839397
(because no factors of R_29 are also factors of a smaller R_k)

Ekstralar:

  • Kodunuz herhangi bir şey yapabilir ya da hiçbir şey yapamaz n < 2.
  • Sen için "makul" bir üst sınır varsayabiliriz nkodunuzu olmayacak - test amaçlı ve yürütme için beklenen çıkışı için n = 10000000örneğin ancak algoritma gerektiğini çalışmak sınırsız hesaplama gücü ve zaman verildiğinde böyle bir durum için.
  • Burada referans için geri ödeme çarpanlarına ayırmaya adanmış bir site bulunmaktadır.
  • Matematikte geçmemiş, ama ben her bir hipotez önerme n bu algoritmanın için ayrı bir sonucu var - olduğunu, hiçbir n öyle ki mevcut Ar n hiçbir roman faktörleri vardır. Birisi cevabında bunu kanıtlar veya onaylamazsa 250 puanlık bir ödül teklif edeceğim . Thomas Kwa zarif bir kanıt önerdi ve ödülümü verdim.

Dahili prime kontrol ve çarpanlara ayırma adil bir oyun mu?
Martin Ender

@ MartinBüttner Kısıtlama yok.
AdmBorkBork


@alephalpha Tabii ki bir OEIS bağlantısı var ;-) Teşekkürler!
AdmBorkBork

Yanıtlar:


5

Pyth, 16 14 13 bayt

-F_m{P/^Td9SQ

Söyleyebileceğim en iyi şekilde, 19 sonsuza dek sürüyor.

-F_m{P/^Td9SQ      Implicit: Q = input
           SQ      Inclusive range 1 to Q
                        Implicit lambda d:
    {P                  unique primes dividing
       ^Td              10**d
      /   9                  //9
   m               map lambda over the range
   m{P/^Td9SQ      Unique prime factors of all repunits up to the Qth
  _                Reverse the list
-F                 Reduce by set difference

Burada deneyin .


Komut satırından çalıştırırsanız ve SymPy yüklüyse, 19 saniyenin altında tamamlanır. 2 saniyeyi geçen ilk giriş 38'dir.
isaacg

12

Her itirazın yeni bir ana faktörü olduğunu kanıtlayın

Zsigmondy Teoremini kullanarak kanıt basittir. Wikipedia'dan:

Eğer sayı teorisinde, Karl Zsigmondy adını Zsigmondy teoremi, devletler bu a> b> 0 aralarında asal olan ve ardından herhangi bir tamsayı için n ≥ 1 , bir asal sayı vardır p (ilkel asal böleni denir) o böler bir n - b n ve a k - b k'yi bölmez herhangi bir pozitif tam sayı için n k < aşağıdaki istisnalarla, [burada geçerli olmayan şeylerden].

Tekrar zamanlarını 9 olarak düşünün: yani 10 n -1 . A = 10 , b = 1 ile Zsigmondy Teoremine göre , bazı asal p | 10 N -1 herhangi bölünmemesi 10 k -1 , k <n .

  • Yana s asal ve 10 N -1 = 9 • R , n , o da ayırmak zorundadır 9 ya da R, n .

  • p , 9'u bölemez, çünkü 9 = 10 1 -1 .

  • Bu nedenle p bölünür R n'yi.

  • p herhangi bölemez R k onu bölmek olmadığından, 10 k -1 = 9 • R k .

Bu nedenle, s Zsigmondy teoremi herhangi yeni bir ana faktördür R n , n ≥ 2'nin . ∎


Tekrarlanan yeni bir asal faktör örneği

Başbakan 487 , R 486'nın tekrarlanan bir asal faktörüdür :

Fermat-Euler teoremi ile 10 487-1 ≡ 1 (mod 487) . 10 mod 487 sırası, yani 1 mod 487 olan 10'un en küçük gücü, bu nedenle 486'nın bir bölücü olmalıdır. Aslında, sipariş 486'ya eşittir. Ayrıca sadece 10 486 ≡ 1 değil (mod 487) , aynı zamanda 1 (mod 487 2 ) .

Bkz burada 10 mod 487 sırası 486 olduğu; yani, daha küçük 10 k- 1 487 ile bölünemez. Açıkça, 487 9'u bölmez, bu yüzden R 486'yı bölmelidir .


6

CJam, 18 bayt

{{)'1*imf}%W%:-_&}

Burada test edin.

19'dan başlayarak (2'den sonraki ilk geri ödeme başlangıcı) oldukça uzun sürecektir.

açıklama

Bu, nyığın üzerindeki giriş numarasını bekleyen ve bunun yerine asal faktörlerin bir listesini bırakan adlandırılmamış bir bloktur (CJam'ın bir işleve eşdeğeridir) :

{      e# Map this block over [0 1 ... n-1]...
  )'1* e#   Increment and create a string of that many 1s.
  i    e#   Convert to integer.
  mf   e#   Get its prime factors.
}%
W%     e# Reverse the list.
:-     e# Fold set difference onto the list, removing from the first list the elements of
       e# all other lists.
_&     e# Remove duplicates. Unfortunately, this necessary. Thomas Kwa found that the 486th
       e# repunit contains 487^2 (where 487 is a novel prime factor).

3
Son üç dakikada ... 20'den 16'ya kadar cidden golf yaptın mı? >.>
AdmBorkBork

@TimmyD ... Şimdilik 18'e kadar çıkmak zorunda kaldım, çünkü kodum şu anda ne kanıtlayabiliyorum ne de çürütebileceğim bir varsayıma dayanıyordu.
Martin Ender

Ooo, bu ilginç bir durum - yinelenen yeni faktörler. İyi yakaladın.
AdmBorkBork

4

Haskell 86 bayt

import Data.Numbers.Primes
f n=[x|x<-primeFactors$div(10^n-1)9,notElem x$f=<<[1..n-1]]

Kullanım örneği: f 8->[73,137] .

Büyükler için çok zaman ve hafıza alır n .

Tanımının Doğrudan uygulanması: tüm asal faktörleri göz xarasında Rn(daha önce görünmüyor hangi f=<<[1..n-1]hepsi asal faktörlerdir R1 ... R(n-1)).


3

Mathematica 82 74 63 bayt

Halep sayesinde 11 bayt kurtardı.

Complement@@Reverse@FactorInteger[(10^Range@#-1)/9][[;;,;;,1]]&

R70'in ana faktörleri

(10 ^ 70-1) / 9 = 1111111111111111111111111111111111111111111111111111111111111111111111

FactorInteger[(10^70 - 1)/9]

{{11, 1}, {41, 1}, {71, 1}, {239, 1}, {271, 1}, {4649, 1}, {9091, 1}, {123551, 1}, { 909091, 1}, {4147571, 1}, {102598800232111471, 1}, {265212793249617641, 1}}


R70'in yeni ana faktörleri

Complement@@Reverse@FactorInteger[(10^Range@#-1)/9][[;;,;;,1]]&[70]

{4147571, 265212793249617641}


Complement@@Reverse@FactorInteger[(10^Range@#-1)/9][[;;,;;,1]]&
alephalpha

Lütfen [[;;,;;,1]]veya ' nın anlamını açıklayınız [[1 ;; All, 1 ;; All, 1]]. Şaşırdım!
DavidC

@DavidCarraher Bir listenin her öğesinin her öğesinin ilk öğesini alır.
LegionMammal978

@DavidCarraher [[;;,;;,1]]ile aynıdır [[All,All,1]].
alephalpha

Şimdi bu mantıklı. BTW, yeniden konumlandırma Rangeçok zekiydi.
DavidC

2

MATL , 25 bayt

Bu, aşağıdakilere kadar giriş için çalışır 16:

10,i:^9/Y[t0)Yftb!w\~s1=)

Aşağıdaki sürüm 31 bayt kullanır ve en fazla çalışır 18. Çünkü 19yaklaşık 4 GB bellek gerektirir (çalıştıramadım).

10,i:^9/Y[t0)5X2Y%Yfotb!w\~s1=)

Misal

>> matl
 > 10,i:^1-,9/t0)5X2Y%Yfotb!w\~s1=)
 > 
> 6
7 13

açıklama

Somutluk girdisi düşünün 6. İlk olarak, ana bölenleri 111111hesaplanır; sonuçlarıdır bu durumda 3, 7, 11, 13, 37. Daha sonra modülo işlemi (bölme kalan) numaraları tüm kombinasyonları için hesaplanmaktadır 1, 11... 111111ve hesaplanan bölenler. Bu, MATL'nin örtülü singleton genişlemesinden yararlanır. Sonuç, bu durumda , her sütun bölenlerden birine karşılık gelen bir 6x 5matrisidir. Kabul edilen bölenler (sütunlar), yalnızca 1değerin (sonuncusu) sıfır kalanı verdiği değerlerdir.

10,i:^9/Y[   % generate vector with `1`, `11`, ... depending on input number, say "n"
t0)          % pick the last element: `111...1` (n ones)
5X2Y%        % * convert to uint64, so that larger numbers can be handled
Yf           % prime factors                                             
o            % * convert to double precision, so that modulus can be done
t            % duplicate                                                 
b            % bubble up element in stack                                
!            % transpose                                                 
w            % swap elements in stack                                    
\            % modulus after division (element-wise, singleton expansion)
~s           % number of zero values in each column
1=           % is equal to 1? (element-wise, singleton expansion)
)            % index divisors with that logical index

(*) Kısa versiyonda kaldırıldı


Bunu yapmanın akıllıca bir yolu.
AdmBorkBork

2

Julia, 103 bayt

R(n)=[keys(factor((10^n-19))...]
n->(r=R(n);isprime(r)?r:setdiff(r,reduce(vcat,[R(i)for i=1:n-1])))

Bu, yardımcı bir işlevi çağıran adsız bir işlevdir R. Bunu çağırmak için ana işleve bir ad verin, örn f=n->....

Ungolfed:

function R(n::Integer)
    collect(keys(factor((10^n - 1) ÷ 9)))
end

function f(n::Integer)
    r = R(n)
    if isprime(r)
        r
    else
        setdiff(r, reduce(vcat, [R(i) for i = 1:n-1]))
    end
end

2

LabVIEW, 33 LabVIEW Temel Öğeleri

19 sonsuza dek sürer ...

Diğer dizide bulunduklarında tüm Asalları kaydedip son kümedeki öğeleri silerek çalışın.


1

J, 24 bayt

[:({:-.}:)@:q:[:+/\10^i.

6'dan sonra genişletilmiş hassas sayısallar bekler (örneğin 19xyerine 19).

Çevrimiçi deneyin!

Büyük olasılıkla sınırlamaları önleyen geri ödemeleri oluşturmanın daha kısa bir yolu vardır.

açıklama

[: ({: -. }:) @: q: [: +/\ 10 ^ i.
                                i. Range [0, input)
                           10 ^    10 raised to the power of the range
                       +/\         Running sum of this list (list of repunits)
                 q:                Prime factors of the repunits
              @:                   Composed with
   ({: -. }:)                      Unique prime factors of last repunit
    {:                              Factors of last repunit (tail of matrix)
       -.                           Set subtraction with
          }:                        Rest of the matrix (curtail)

Görsel olarak nasıl çalışır?

Sanırım J bilmeyenler için bu tür görsel açıklamaların midesi daha kolay. Bunlar REPL'in sonuçları.

   10 ^ i.6
1 10 100 1000 10000 100000

   +/\ 10 ^ i. 6
1 11 111 1111 11111 111111

   q: +/\ 10 ^ i. 6
 0   0  0  0  0
11   0  0  0  0
 3  37  0  0  0
11 101  0  0  0
41 271  0  0  0
 3   7 11 13 37

   ({: -. }:) q: +/\ 10 ^ i. 6
7 13
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.