程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 【NOIP訓練】【數論】超級計算機,noip數論

【NOIP訓練】【數論】超級計算機,noip數論

編輯:C++入門知識

【NOIP訓練】【數論】超級計算機,noip數論


題目描述
有以下幾個問題:
1 給定正整數 a,b,c 求方程  ax\,$\equiv$\,b\,(mod$\quad$c) 的最小非負整數解。
2 給定正整數 f,g,h求方程 g^x\,$\equiv$\,f\,(mod$\quad$h)的最小非負整數解。
3 給定正整數 u,v,w求方程 x^u$\equiv$v(mod$\quad$w) 在模 w
 意義下解的數量。
4 給定正整數 x,y,z
求  (\phi(x)+\mu(y))$\quad$mod$\quad$z 的值。其中 \phi(x) 是歐拉函數, \mu(y)是莫比烏斯函數。
輸入格式
輸入文件共四行,按上述描述中四個問題的順序,給出每個問題。
第一行三個正整數 a,b,c  表示第一個問題,保證 a,b<c
第二行三個正整數 f,g,h 表示第二個問題,保證 f,g<h 
第三行三個正整數 u,v,w 表示第三個問題,保證 w 為質數且 u,v<w 
第四行三個正整數 x,y,z
表示第四個問題。
輸出格式
共四行每行一個整數,分別表示四個問題的答案。對於前兩個問題,若問題無解則輸出-1。對於第三個問題你只需輸出解的數量。
樣例數據
super.in
3 6 8
9 10 12
4 4 7
5 4 20

super.out
2
-1
2
4
數據范圍
20% 的數據: a,b,c,f,g,h,u,v,w$\leq$20
60% 的數據: x,y,z$\leq$230
100% 的數據: a,b,c,f,g,h,u,v,w$\leq$230;x,y,z$\leq$260
評分方式
對於每個測試點:
• 第一個問題正確得 2 分。
• 第二個問題正確得 3 分。
• 第三個問題正確得 3 分。

 

題解

第一問:將式子化成  ax+cy=b , 拓展歐幾裡得即可。

第二問: BSGS大步小步算法解高次同余方程。

詳情請見TonyFang博客:http://tonyfang.is-programmer.com/posts/178997.html

第三問:求出 w 的一個原根 p,可以求出 p^b\,$\equiv$\,v(mod$\quad$w),並設 p^a\,$\equiv$\,x(mod$\quad$w), 則由費馬小定理可知,解該方程等價於解 au$\equiv$b(mod$\quad$w-1) 所以實際上它是前兩個問題的組合應用。

第四問:Pollard Rho算法和Millar Rabin算法的應用。

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