程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 4335 What is N? 簡單數論

HDU 4335 What is N? 簡單數論

編輯:C++入門知識

此題就是考察了一個簡單的公式

a^x % c = a^(x % phi(c) + phi(c))  %c  其中x>= phi(c)
phi(c)為歐拉函數
注意  歐拉函數的定義為 不超過n且與n互素的正整數的個數 而不是小於n
並且phi(1) =1

然後對於本題  分成三部分
第一部分  n! < phi(c)  這時就需要直接計算n! ,好在phi(c)不會很大。
第二部分 n! >= phi(c) 但是 n! % phi(c) != 0   這一部分同樣需要暴力計算,不過可以進行取模運算了,不會出現非常大的數
第三部分n! >= phi(c) 並且n! % phi(c) == 0  這一部分就轉化為了  n^phi(c) % c    然後就變成了(n % c) ^ phi(c) % c   那麼就成了一個長度為c的循環節了

最後 需要特別注意的是,題目給的范圍很大,需要用uLL, 並且答案有可能會超過uLL,因為當 c=1,b=0時,0到2^64-1都是符合條件的,所以需要特判
代碼不再給出,也不是很難寫


作者:sdj222555

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved