首頁>Club>
4
回覆列表
  • 1 # 使用者5406229185356

    b=m*mb是int,範圍2^-31到2^31,當m>2^16=65536時,b會溢位,無法正確求解而9376下一個自守數是90625,肯定是求不出來的解決方案:如果不想寫大整數乘法除法,或者呼叫非標準C++中的64位整型,那麼可以藉助數學手段簡化問題原題為求m,使m*m與m關於10^k同餘,其中k是m的位數那麼就有m*m-m可以被10^k整除,即m*(m-1)被2^k*5^k整除,而m與(m-1)互質,則可以知道(2^k 整除 m && 5^k 整除 m-1) || (2^k 整除 m-1 && 5^k 整除 m)程式碼:#include <iostream>using namespace std;int main(){ int m,n; cout<<"請輸入兩個2~200000之間的數"<<endl; cin>>m>>n; int c=1; int e=1,f=1;//修改處 int d=0; while (m<=n) { while (c<=m)//修改處c=10^k,e=2^k,f=5^k { c=c*10; e=e*2; f=f*5; } if ((m%e==0 && (m-1)%f==0)||(m%f==0 && (m-1)%e==0))//修改處 { d++; cout<<m<<" "; if(d%5==0) cout<<endl; } m++; } cout<<endl; system ("pause"); return 0;}

  • 中秋節和大豐收的關聯?
  • 流放之路野蠻人轉職職業有哪些?