--- title: 數學專題進度報告 tags: markdown, hackmd slideOptions: theme: night transition: slide --- # 數學專題進度報告 --- ## 鄰居數 * 命題緣起 * 名詞定義 ---- ## 原題目敘述 * 兩個十位數如果恰好只有某一位數的數字不相同,則稱這二個數互為“鄰居數” * 例如:1234567890,1234507890 就是二個“鄰居數”。請問至多可寫下多少個十位數,使得這些數中的任二個數都互不為“鄰居數”? ---- ## 名詞定義 * 我們將此命題定義為 **n位k階** * n代表它是一個n位數 * k代表他洽有k個位數不同 --- ## 討論 **n位1階** * 皆為10個 --- ## 討論 非**n位1階** ---- ### 解題想法 * 提出一構造解答方法 * 證明構造方法之正確性 * 上界證明 ---- ### 構造方法 ![](https://i.imgur.com/wu4UPtl.png) ---- ### 構造方法證明 ![](https://i.imgur.com/SaFqbd3.png) ---- ### 上界證明 ![](https://i.imgur.com/1CFL6pk.png) --- ## 討論 **非n位2階** * 這裡的 **"2位"** 定義為洽兩個位數不相同 ---- ### 1位2階 * 因為少於2不討論 ---- ### 2位2階 -> **10個** * 構造方法 (舉例其中一種) * * 10 11 12 13 14 15 16 17 18 19 --- ### 3位2階-> **10個** * 構造方法 (舉例其中一種) * 100 101 102 103 104 105 106 107 108 109 --- ## 目前遇到問題 ---- ### 4位2階無法證明 * 解決辦法: 目前可用程式枚舉解決 * 根據我跑了一小時1000000種可能情況下 最大值為 **105** * 尚未看出規律 數字分散凌亂 [數字列表](https://docs.google.com/spreadsheets/d/1e76Sh50PlCQNEE9t5qCjSO7RZAomg8_ZloZfy4hZRcs/edit#gid=0) ---- ### 5位2階以上構造不出來 * **數字過大程式跑不出來** * 目前用電腦計算到之最大值為782 * 我們預期應為810 ---- ### 程式碼 ```c++= #include<bits/stdc++.h> using namespace std; #define ll long long int vector<string> st; set<int> fd; bool cal(string x,string y){ int ct=0; for(int i=0;i<5;i++){ if(x[i]!=y[i])ct++; } if(ct==2)return true; else return false; } int main(){ ofstream oFile; oFile.open("scoresheet.csv", ios::out | ios::trunc); vector<int> v; v.clear(); for(int i=99999;i>=10000;i--){ v.push_back(i); } int ans=0; for(int t=0;t<1;t++){ random_shuffle(v.begin(),v.end()); st.push_back(to_string(v[0])); fd.insert(v[0]); int ct=1; for(int i=0;i<(int)v.size();i++){ bool flag=1; if(fd.find(v[i])==fd.end()){ for(int j=0;j<st.size();j++){ if(cal(to_string(v[i]),st[j])){ flag=0; break; } } if(flag)oFile<<v[i]<<endl,fd.insert(v[i]),st.push_back(to_string(v[i])),ct++; } else if(fd.find(i)!=fd.end())continue; } ans=max(ct,ans); cout<<"Now the answer is: "<<ct<<endl; } cout<<"The final answer is: "<<ans<<endl; } ```