Java高次冪取模+積性函數+逆元的方法
題目意思:2004^x的所有正因數的和(S)對29求餘;輸出結果;
原題連結
題目解析:解析參考來源:點選開啟連結
因子和
6的因子是1,2,3,6; 6的因數和是s(6)=1 2 3 6=12;
# 20的因數是1,2,4,5,10,20; 20的因數和是s(20)=1 2 4 5 10 20=42;
2的因數是1,2; 2的因數和是s(2)=1 2=3;
3的因數是1,3; 3的因數和是s(3)=1 3=4;
4的因數和是
s(4)=1 2 4=7;
5的因數和是
s(5)=1 5=6;
s( 6)=s(2)*s(3)=3*4=12;
s(20)=s(4)*s(5)=7*6=42;
這是巧合嗎?
再看s(50)=1 2 5 10 25 50=93=3*31=s(2)*s(25),s(25)=1 5 25=31.
這在數論中叫做積性函數,當gcd(a,b)=1時s(a*b)=s(a)*s(b);
如果p是質數
s(p^n)=1 p p^2 ... p^n=(p^(n 1)-1) /(p-1) (1)
例hdu1452 Happy2004
計算因子與s(2004^X) mod 29,
2004=2^2 *3 *167
s(2004^X) ) = (s (2^2X))) *(s(3^X))) * (s(167^X)))
167)=22;
s(2004^X) ) = (s(2^2X))) *(s(3^X))) * (s(22^X)))
a=s(2^2X)=(2^( 2X 1)-1)//根據(1)
b=s(3^X)= (3^(X 1)-1)/2//根據(1)
c=s(22^X)= (22^(X 1)-1)/21//根據(1)
%運演算法則
1. (a*b) %p= ( a%p) *(b%p)
%運演算法則
2. (a/b) %p= ( a *b^(-1)%p)
b^(-1)是
b的逆元素(%p)
2的逆元素是15 ()) ,因為2*15=30 % 29=1 % 29
21的逆元素是18 ()) ,因為21*18=378% 29 =1 % 29
因此
a=(powi(2,2*x 1, 29)-1));
b=(powi(3,x 1,29)-1)*15 );
c=(powi(22,x 1,29) -1)*18 );
ans=(a*b)% 29*c % 29;
資料拓展: 1.
高次冪快速取模連結
2.積性函數:數論中的積性函數:對於正整數##n
#n
a###,bb)f(互質時f(aab
)=f(),在數論上就稱它為積性函數。若裡b的逆元p滿足(b*p)%Mod=1。先來簡單證明:完全積性的。若將得結果c。這n逆元p(b有逆元的條件是gcd(b,Mod)==1,顯然素數肯定有逆元),然後由(a*p)%Mod表示成質因子分解式;
3.求逆:(a/b)%Mod=c; (b*p)%Mod=1; ==》 (a/b)*(b*p) %Mod=c; ====== (a/b)*(b*p) %Mod=c; ======== 》 (a*p)%Mod=c;#從上面可以看出結論的正確性,當然這裡b需要是a的因子。接下來就需要知道根據b和Mod,我們怎麼計算逆元p了。大家都應該熟悉擴展歐幾里德演算法,它用來解已知a、b時求一組解(x,y),使得a*x b*y=1。 x和y分別是a對b取模的逆元和b對a取模的逆元,可由模上b或a來驗證。#下面解釋原因:#模m乘法逆元#定義:對於整數a,m,若有整數b,滿足ab ≡ 1(mod m),則說,b是a的模m乘法逆元。定理:a存在模m的乘法逆元的充要條件是gcd(a,m) = 1充分性:因為gcd(a,m) = 1根據歐拉定理,有#a^φ(m) ≡ 1(mod m)############因此########################a * a^ (φ(m)-1) mod m = 1#########################所以存在a的模m乘法逆元,即a^( φ(m)-1)#########################必要性:###假設存在a模m的乘法逆元為b,則
ab ≡ 1 (mod m)
#所以
ab = km 1
所以
##1 = ab - km由歐幾裡得定理,有gcd(a,m) = 1##由定理知:#對於ax by = 1,可以看出x是a模b的乘法逆元,y是b模a的乘法逆元。反過來,要計算a模b的乘法逆元,就相當於求ax by = 1的x的最小正整數解,從而化為線性不定方程式解決。求b%Mod的逆元p還有另一種方法,即p=b^(Mod-2)%Mod,因為b^(Mod-1)%Mod=1(這裡需要Mod為質數)。錯誤分析:1:if(y&1)ans*=x);//誤把試中ans=x*x)2.資料型別要用__int64,程式碼實作:
具體參考:http://blog.csdn.net/synapse7/article/details/9901195呼叫ExtGcd(b,Mod,x,y),x即為b%Mod的逆元p。
#include<cstdio> #include<cstdlib> using namespace std; typedef __int64 ll; ll powmol(ll x,ll y)//高次幂取模的求x^ymod29 { ll ans=1; x=x%29; while(y) { if(y&1)ans*=x%29;//y是奇数情况的处理; x=x*x%29; y>>=1;// } return ans; } int main() { ll x,a,b,c; while(scanf("%I64d",&x),x) { a=(powmol(2,2*x+1)-1)%29; b=(powmol(3,x+1)-1)*15%29; c=(powmol(22,x+1)-1)*18%29; printf("%I64d\n",(a*b)%29*c%29); } return 0; }
以上是Java高次冪取模+積性函數+逆元的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。
