Độ che phủ tối thiểu của các bazơ để kiểm tra dư lượng bậc hai của độ vuông


11

Thử thách

Tìm bìa nhỏ nhất của căn cứ (ví dụ, môđun) có bộ cặn bậc hai có thể được kiểm tra thông qua bảng tra cứu để xác định dứt khoát hay không một số nguyên không âm cho n là một hình vuông hoàn hảo. Tất cả các cơ sở phải nhỏ hơn hoặc bằng căn bậc hai của giá trị tối đa của n .

Câu trả lời với tập hợp cơ sở nhỏ nhất cho một thể loại n đã cho sẽ chiến thắng thử thách. (Điều này có nghĩa là có khả năng có nhiều hơn một người chiến thắng.) Các loại của n là:

         Category       Maximum allowed n    Maximum allowed modulus/base
    -------------    --------------------    ----------------------------
     8-bit values                     255                              15
    16-bit values                   65535                             255
    32-bit values              4294967295                           65535
    64-bit values    18446744073709551615                      4294967295

Trong trường hợp cà vạt có hai bộ có số lượng bằng nhau, cà vạt sẽ đi đến bộ có khả năng lớn hơn để phát hiện các hình vuông không sớm hơn trong chuỗi.

Trong trường hợp không tìm thấy bìa hoàn chỉnh (hoàn toàn có khả năng cho các loại 32 bit và 64 bit), người chiến thắng sẽ là tập hợp các cơ sở có thể thống kê hoặc chứng minh được tỷ lệ phần trăm không bình phương cao nhất (không chính xác báo cáo bình phương là không bình phương). Xem dưới đây để thảo luận về bìa không đầy đủ.

Lý lịch

Trong nhiều ứng dụng lý thuyết số, câu hỏi đặt ra liệu một số n có phải là một hình vuông hoàn hảo hay không (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, v.v.). Một cách để kiểm tra xem n có phải là hình vuông hay không là kiểm tra xem sàn (n) ² = n, nghĩa là, liệu căn bậc hai được làm tròn của n , khi bình phương, có trả lại n không . Ví dụ: sàn (√123) ² = 11² = 121, không phải là 123, vì vậy 123 không phải là hình vuông; nhưng sàn (√ 121) ² = 11² = 121, nên 121 là hình vuông. Phương pháp này hoạt động tốt đối với số lượng nhỏ, đặc biệt là khi có hoạt động căn bậc hai phần cứng. Nhưng đối với số lượng lớn (hàng trăm hoặc hàng nghìn bit) thì có thể rất chậm.

Một cách khác để kiểm tra độ vuông góc là loại trừ các ô vuông không sử dụng bảng dư lượng bậc hai. Ví dụ: tất cả các hình vuông trong cơ sở 10 phải có một chữ số (vị trí) cuối cùng là 0, 1, 4, 5, 6 hoặc 9. Các giá trị này tạo thành tập hợp dư lượng bậc hai cho cơ sở 10. Vì vậy, nếu một cơ sở -10 số kết thúc bằng 0, 1, 4, 5, 6 hoặc 9, bạn biết rằng nó có thể là hình vuông và sẽ cần phải kiểm tra thêm. Nhưng nếu một số cơ sở 10 kết thúc bằng 2, 3, 7 hoặc 8, thì bạn có thể chắc chắn rằng nó không phải là số hình vuông.

Vì vậy, hãy nhìn vào một cơ sở khác. Tất cả các ô vuông trong cơ sở 8 phải kết thúc bằng 0, 1 hoặc 4, điều này thuận tiện chỉ là 3 trong số 8 khả năng, nghĩa là 37,5% khả năng một số ngẫu nhiên có thể là hình vuông, hoặc 62,5% cơ hội của một số ngẫu nhiên chắc chắn không phải là hình vuông. Đó là những tỷ lệ cược tốt hơn nhiều so với những gì cơ sở 10 đưa ra. (Và lưu ý rằng một hoạt động mô đun cơ sở 8 chỉ đơn giản là một hoạt động hợp lý - và hoạt động, trái ngược với mô đun cơ sở 10, là một phân chia cho 10 với phần còn lại.)

Có căn cứ nào tốt hơn không? Vâng, vâng, thực sự. Cơ sở 120 có 18 khả năng (0, 1, 4, 9, 16, 24, 25, 36, 40, 49, 60, 64, 76, 81, 84, 96, 100 và 105), chỉ chiếm 15% cơ hội có thể là hình vuông. Và cơ sở 240 vẫn tốt hơn, chỉ có 24 khả năng, chỉ chiếm 10% cơ hội có thể là hình vuông.

Nhưng không một cơ sở đơn lẻ nào có thể xác định dứt khoát (trừ khi nó lớn hơn số lượng tối đa đang được thử nghiệm, điều này là không thực tế). Một cơ sở duy nhất một mình chỉ có thể loại trừ ý thức ; nó không thể kết luận xác minh ý thức . Chỉ một tập hợp các cơ sở được lựa chọn cẩn thận, làm việc cùng nhau, có thể kết luận xác minh độ vuông góc trên một loạt các số nguyên.

Vì vậy, câu hỏi trở thành: Tập hợp các cơ sở nào tạo thành một vỏ bọc tối thiểu cùng nhau cho phép khấu trừ dứt khoát về độ vuông góc hoặc không vuông góc?

Ví dụ về bìa chính xác nhưng không tối thiểu

Vỏ bọc 16 chân đế {3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25, 29, 31, 37} là đủ để xác định chính xác độ vuông góc hoặc không vuông góc của tất cả các giá trị 16 bit 0 đến 65535. Nhưng nó không phải là tối thiểu bìa , bởi vì có ít nhất một vỏ 15 cơ sở tồn tại mà cũng có thể dễ dàng khám phá. Trên thực tế, có khả năng các vỏ bọc nhỏ hơn tồn tại - có lẽ chỉ có 6 hoặc 7 căn cứ.

Nhưng để minh họa, chúng ta hãy xem thử nghiệm giá trị mẫu của n bằng cách sử dụng bộ bìa 16 gốc này. Dưới đây là các bộ dư lượng bậc hai cho các bộ cơ sở trên:

Base m   Quadratic residue table specific to base m
------   ----------------------------------------------------
   3     {0,1}
   4     {0,1}
   5     {0,1,4}
   7     {0,1,2,4}
   8     {0,1,4}
   9     {0,1,4,7}
  11     {0,1,3,4,5,9}
  13     {0,1,3,4,9,10,12}
  16     {0,1,4,9}
  17     {0,1,2,4,8,9,13,15,16}
  19     {0,1,4,5,6,7,9,11,16,17}
  23     {0,1,2,3,4,6,8,9,12,13,16,18}
  25     {0,1,4,6,9,11,14,16,19,21,24}
  29     {0,1,4,5,6,7,9,13,16,20,22,23,24,25,28}
  31     {0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28}
  37     {0,1,3,4,7,9,10,11,12,16,21,25,26,27,28,30,33,34,36}

Bây giờ, hãy kiểm tra số n = 50401 bằng cách sử dụng bộ cơ sở này, bằng cách chuyển đổi nó thành từng cơ sở. (Đây không phải là cách hiệu quả nhất để kiểm tra dư lượng, nhưng nó đủ cho mục đích giải thích.) Đó là vị trí số 1 mà chúng tôi quan tâm ở đây (được đánh dấu bên dưới trong ngoặc đơn):

 Base                               "Digits" in base m
   m          m^9   m^8   m^7   m^6   m^5   m^4   m^3   m^2   m^1  ( m^0 )
 ----      -----------------------------------------------------------------
   3           2     1     2     0     0     1     0     2     0   (  1 ) ✓
   4                       3     0     1     0     3     2     0   (  1 ) ✓
   5                             3     1     0     3     1     0   (  1 ) ✓
   7                                   2     6     6     6     4   (  1 ) ✓
   8                                   1     4     2     3     4   (  1 ) ✓
   9                                         7     6     1     2   (  1 ) ✓
  11                                         3     4     9     5   ( 10 )
  13                                         1     9    12     3   (  0 ) ✓
  16                                              12     4    14   (  1 ) ✓
  17                                              10     4     6   ( 13 ) ✓
  19                                               7     6    11   ( 13 )
  23                                               4     3     6   (  8 ) ✓
  25                                               3     5    16   (  1 ) ✓
  29                                               2     1    26   ( 28 ) ✓
  31                                               1    21    13   ( 26 )
  37                                                    36    30   (  7 ) ✓

Vì vậy, chúng ta có thể thấy rằng trong 13 trong số các bazơ này, phần dư phù hợp với phần dư bậc hai đã biết (gọi đây là "hit" trong bảng) và trong 3 trong số các bazơ này, phần dư không khớp với phần dư bậc hai đã biết (gọi đây là phần dư "cô"). Tất cả chỉ mất 1 lần để biết rằng một số không phải là hình vuông, vì vậy chúng tôi có thể dừng lại ở mức 11, nhưng với mục đích minh họa, chúng tôi đã kiểm tra tất cả 16 căn cứ ở đây.

Ví dụ về một trang bìa không đầy đủ

Về mặt kỹ thuật, một trang bìa không hoàn chỉnh không phải là một trang bìa, mà là bên cạnh điểm. Tập hợp các cơ sở {7, 8, 11, 15} gần như bao gồm tất cả các giá trị 8 bit của n từ 0 đến 255 một cách chính xác, nhưng không hoàn toàn. Cụ thể, nó xác định không chính xác 60 và 240 là hình vuông (đây là dương tính giả) - nhưng nó xác định chính xác tất cả các ô vuông thực tế (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196 và 225) và không có kết quả dương tính giả nào khác. Vì vậy, đây là một bộ 4 bộ gần như thành công như một giải pháp, nhưng cuối cùng thất bại, bởi vì một vỏ bọc không đầy đủ không phải là một giải pháp hợp lệ.

Đối với 8 bit n , tập hợp các cơ sở {7, 8, 11, 15} là một trong hai bộ 4 cơ sở tạo ra hai lỗi và có bảy bộ 4 cơ sở chỉ tạo ra một lỗi. Không có bộ 4 cơ sở nào thực sự tồn tại tạo thành một vỏ bọc hoàn chỉnh và chính xác cho các giá trị 8 bit. Bạn có thể tìm thấy một bộ 5 cơ sở không tạo ra lỗi, bao gồm tất cả các giá trị 8 bit một cách chính xác không? Hay bạn cần 6 trở lên? (Tôi biết câu trả lời cho 8 bit n , nhưng tôi sẽ không đưa ra. Tôi không biết câu trả lời cho 16 bit, 32 bit hoặc 64 bit và tôi tin ngay cả 16- trường hợp bit là không thể giải quyết thông qua tìm kiếm vũ phu. Giải quyết các trường hợp 32 bit và 64 bit chắc chắn sẽ yêu cầu di truyền, heuristic hoặc các kỹ thuật tìm kiếm khác.)

Một nhận xét về số lượng lớn mật mã

Ngoài các số 64 bit - lên đến hàng trăm hoặc hàng nghìn chữ số nhị phân - đây là nơi kiểm tra độ vuông nhanh thực sự hữu ích nhất, ngay cả khi nắp không đầy đủ (mà chắc chắn sẽ là số thực sự lớn). Làm thế nào một bài kiểm tra như thế này vẫn có thể hữu ích ngay cả khi nó không đủ quyết định? Chà, hãy tưởng tượng bạn đã có một bài kiểm tra cực kỳ nhanh về độ chính xác, hoạt động chính xác 99,9% thời gian và cho kết quả âm tính giả là 0,1% thời gian còn lại và không bao giờ cho kết quả dương tính giả. Với một bài kiểm tra như vậy, bạn sẽ có thể xác định không nhận biết được một số gần như ngay lập tức, và trong trường hợp đặc biệt là thiếu quyết đoán, sau đó bạn có thể sử dụng một phương pháp chậm hơn để giải quyết một cách khác. Điều này sẽ giúp bạn tiết kiệm khá nhiều thời gian.

Ví dụ: tập {8, 11, 13, 15} đúng 99,61% thời gian cho các giá trị 8 bit của n từ 0 đến 255, đúng 95,98% thời gian cho các giá trị 16 bit của n từ 0 đến 65535 và đúng 95,62% thời gian cho các giá trị 24 bit của n từ 0 đến 16777215. Khi n đi đến vô cùng, tỷ lệ chính xác của bộ cơ sở này giảm xuống, nhưng nó tiếp cận một cách bất thường và không bao giờ giảm xuống dưới 95,5944% tính đúng đắn

Vì vậy, ngay cả bộ 4 căn cứ nhỏ bé này cũng rất hữu ích để xác định gần như ngay lập tức khoảng 22 trong số 23 số lớn tùy ý là không phải hình vuông - tránh sự cần thiết phải kiểm tra thêm các số đó bằng các phương pháp chậm hơn. Các phương pháp chậm hơn sau đó chỉ cần được áp dụng trong một tỷ lệ nhỏ các trường hợp không thể loại trừ bằng thử nghiệm nhanh này.

Thật thú vị khi lưu ý rằng một số cơ sở 16 bit đạt được tốt hơn 95% một mình. Trên thực tế, mỗi căn cứ dưới đây có thể loại bỏ tốt hơn 97% tổng số con số đến vô cùng vì không phải là hình vuông. Phần dư bậc hai được đặt cho mỗi cơ sở này có thể được biểu diễn dưới dạng một mảng bit được đóng gói chỉ sử dụng 8192 byte.

Dưới đây là 10 căn cứ đơn mạnh nhất dưới 2 ^ 16:

 Rank   Base    Prime factorization       Weeds out
 ----   ------------------------------    ---------
  1.    65520 = 2^4 x 3^2 x 5 x 7 x 13      97.95%
  2.    55440 = 2^4 x 3^2 x 5 x 7 x 11      97.92%
  3.    50400 = 2^5 x 3^2 x 5^2 x 7         97.56%
  4.    52416 = 2^6 x 3^2 x 7 x 13          97.44%
  5.    61200 = 2^4 x 3^2 x 5^2 x 17        97.41%
  6.    44352 = 2^6 x 3^2 x 7 x 11          97.40%
  7.    63360 = 2^7 x 3^2 x 5 x 11          97.39%
  8.    60480 = 2^6 x 3^3 x 5 x 7           97.38%
  9.    63840 = 2^5 x 3 x 5 x 7 x 19        97.37%
 10.    54720 = 2^6 x 3^2 x 5 x 19          97.37%

Xem bất cứ điều gì thú vị mà tất cả các căn cứ đều có điểm chung? Không có lý do nào để nghĩ rằng chúng có thể hữu ích khi kết hợp với nhau (có thể là chúng, có thể chúng không), nhưng có một số manh mối tốt ở đây là căn cứ nào có khả năng có ảnh hưởng nhất đối với các loại số lớn hơn.

Thách thức phụ: Một trong những cơ sở có ảnh hưởng nhất (nếu không phải nhiều nhất) lên tới 2 ^ 28 là 245044800, một mình có thể loại bỏ chính xác 99,67% số không vuông, hoặc khoảng 306 trong số 307 số ngẫu nhiên được ném vào nó. Bạn có thể tìm thấy các cơ sở đơn có ảnh hưởng nhất ít hơn 2 ^ 32?

Liên quan

Có một số ý tưởng rất hay trong các câu hỏi sau đây có liên quan chặt chẽ, cũng như một số thủ thuật tối ưu hóa vi mô để thực hiện các hoạt động nhất định nhanh hơn. Mặc dù các câu hỏi được liên kết không đặt ra cụ thể để tìm ra bộ căn cứ mạnh nhất, ý tưởng về căn cứ mạnh hoàn toàn tập trung vào một số kỹ thuật tối ưu hóa được sử dụng ở đó.


Làm thế nào bạn sẽ xác định được bộ ngắt kết nối kiểm tra từng số trong phạm vi đã cho và tính tổng số bao nhiêu kiểm tra đã được thực hiện?
Martin Ender

Tôi sẽ xem xét tính chính xác của các tập hợp dư lượng bậc hai cho mỗi cơ sở. Ví dụ, 4 là cơ sở tốt hơn 3, vì chỉ một nửa giá trị modulo 4 là dư lượng bậc hai, trong khi hai phần ba giá trị modulo 3 là dư lượng bậc hai. Do đó, 4 có khả năng loại bỏ các con số sớm hơn. Cơ sở tồi tệ nhất là 2, vì nó không thể loại trừ bất kỳ số nào và cơ sở tốt nhất dưới 256 là 240, có khả năng loại trừ 90% số. Có thể phải lấy mẫu Monte Carlo cho các căn cứ thực sự lớn.
Todd Lehman

Vâng, điều đó có ý nghĩa. Nhưng bạn sẽ quyết định ràng buộc chỉ bởi cơ sở đầu tiên có xác suất khác nhau, hoặc bạn sẽ tìm ra hiệu quả của toàn bộ dựa trên xác suất như thế nào? Tôi cũng nghĩ rằng xác suất không còn độc lập nữa khi bạn đã kiểm tra các căn cứ khác.
Martin Ender

2
Trong trường hợp không gian n lớn , tôi nghĩ rằng tôi sẽ phải quyết định ràng buộc dựa trên hiệu quả ước tính tổng thể, như được tính bằng cách nhân các xác suất dự đoán của từng bộ dư lượng. Ví dụ: các cơ sở {8,11,13,15} có xác suất lần lượt là 0,375, 0,545455, 0,538462 và 0,4, nhân với 0,044056. Trừ đi từ 1, điều này cho 0,955944, điều này rất phù hợp với kết quả đếm toàn diện là 95,62% khi được đo trên tất cả n trong [0,2 ^ 24-1].
Todd Lehman

Câu trả lời:


7

Toán học

Tôi thực sự không biết nhiều về lý thuyết số (thật không may), vì vậy đây là một cách tiếp cận khá ngây thơ. Tôi đang sử dụng một thuật toán tham lam luôn thêm cơ sở có nhiều lỗi nhất cho các số còn lại.

bits = 8
Timing[
 maxN = 2^bits - 1;
 maxBase = 2^(bits/2) - 1;
 bases = {
     #,
     Union[Mod[Range[0, Floor[#/2]]^2, #]]
     } & /@ Range[3, maxBase];
 bases = SortBy[bases, Length@#[[2]]/#[[1]] &];
 numbers = {};
 For[i = 0, i <= Quotient[maxN, bases[[1, 1]]], ++i,
  AppendTo[numbers, # + i*bases[[1, 1]]] & /@ bases[[1, 2]]
  ];
 While[numbers[[-1]] > maxN, numbers = Most@numbers];
 numbers = Rest@numbers;
 i = 0;
 cover = {bases[[1, 1]]};
 lcm = cover[[-1]];
 Print@cover[[1]];
 While[Length@numbers > maxBase,
  ++i;
  bases = DeleteCases[bases, {b_, r_} /; b\[Divides]lcm];
  (*bases=SortBy[bases,(Print[{#,c=Count[numbers,n_/;MemberQ[#[[2]],
  Mod[n,#[[1]]]]]}];c)&];*)
  bases = SortBy[
    bases,
    (
      n = Cases[numbers, n_ /; n < LCM[#[[1]], lcm]];
      Count[n, n_ /; MemberQ[#[[2]], Mod[n, #[[1]]]]]/Length@n
      ) &
    ];
  {base, residues} = bases[[1]];
  numbers = Cases[numbers, n_ /; MemberQ[residues, Mod[n, base]]];
  AppendTo[cover, base];
  lcm = LCM[lcm, base];
  Print@base
  ];
 cover
 ]

Nó giải quyết 8 bit một cách nhanh chóng với 6 cơ sở sau:

{12, 13, 7, 11, 5, 8}

16 bit mất 6s và kết quả trong bìa 6 cơ sở sau:

{240, 247, 253, 119, 225, 37}

Đối với các trường hợp lớn hơn, phương pháp này rõ ràng là hết bộ nhớ.

Để vượt quá 16 bit, tôi cần tìm ra cách kiểm tra xem bìa có hoàn chỉnh mà không thực sự giữ một danh sách tất cả các số lên đến N max (hoặc đi và tìm hiểu về lý thuyết số).

Chỉnh sửa: Giảm thời gian chạy cho 16 bit từ 66 xuống còn 8 bằng cách sắp xếp lại danh sách các số chỉ với những số không bị loại trừ bởi cơ sở hiệu quả nhất. Điều này cũng sẽ cải thiện đáng kể dấu chân bộ nhớ.

Chỉnh sửa: Tôi đã thêm hai tối ưu hóa nhỏ để giảm không gian tìm kiếm. Đây không phải là một trong những danh mục chính thức, nhưng với điều đó tôi đã tìm thấy một vỏ bọc 8 cơ sở cho 24 bit trong 9,3 giờ:

{4032, 3575, 4087, 3977, 437, 899, 1961, 799}

Để tối ưu hóa, tôi hiện đang bỏ qua tất cả các cơ sở phân chia LCM của các căn cứ đã có trong trang bìa, và khi tôi kiểm tra hiệu quả của một căn cứ, tôi chỉ kiểm tra nó với các con số lên đến LCM của căn cứ mới đó và tất cả các căn cứ tôi đã có có.


1
@ToddLehman Tôi không biết nếu bạn thấy giải pháp đầu tiên của tôi trước khi tôi chỉnh sửa nó với giải pháp tham lam. (Hãy xem lịch sử chỉnh sửa nếu bạn không.) Ở đó tôi chỉ chọn căn cứ theo tỷ lệ hit / miss chung của họ cho đến khi tôi có bản cover hoàn chỉnh. Điều đó mang lại 8 cơ sở cho 8 bit và 29 cơ sở cho 16 bit. : D
Martin Ender

1
@ToddLehman Cảm ơn các bài kiểm tra! :) Tôi tự hỏi những người có kiến ​​thức lý thuyết số thực tế có thể đưa ra. Tôi có một vài ý tưởng để tăng tốc nó, vì vậy tôi có thể đạt tới 24 bit, nhưng tôi nghĩ rằng tôi cần tập trung vào việc vượt qua thử thách tiếp theo của riêng mình.
Martin Ender

1
@ToddLehman Có bìa 24 bit cho bạn. Tôi đã tự hỏi liệu tôi có thể sử dụng các yếu tố chính hay không, nhưng tôi vẫn chưa nghĩ ra cách giải quyết đàng hoàng. Tất cả những gì tôi có thể làm là cải thiện thứ tự kiểm tra căn cứ, nhưng tôi không chắc chắn khi nào tôi có thể hủy bỏ điều đó.
Martin Ender

1
@ToddLehman Bạn không cần gắn thẻ tôi trong các bài đăng của riêng tôi vì dù sao tôi cũng sẽ được thông báo. Đó là lý do tại sao SE vô hiệu hóa tự động hoàn thành cho đến khi có ý kiến ​​từ nhiều người dùng, nơi có thể có ý nghĩa để giải quyết cụ thể cho OP.
Martin Ender

1
Chỉ cần tìm thấy một nắp 9 cơ sở cho 28 bit: {15840, 15827, 16211, 12549, 14911, 15111, 9869, 14647, 16043}. Thời gian chạy là 36,5 phút, sử dụng chương trình C được tối ưu hóa để đánh giá thể lực bằng cách sử dụng các thao tác bitwise được đóng gói bằng thuật toán tham lam. Bộ 9 chân đế này là một vỏ bọc hoàn hảo cho các số nhỏ hơn 2²⁸ và chính xác 99.999983% cho các số trong phạm vi 2⁶⁴.
Todd Lehman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.