POJ 1845-Sumdiv 題解(數論,約數和公式,逆元,高中數學)

来源:http://www.cnblogs.com/ashon37w/archive/2017/06/18/7045651.html
-Advertisement-
Play Games

題目描述 給定A,B,求A^B的所有因數的和,再MOD 9901 輸入 一行兩個整數 A 和 B。 輸出 一行,一個整數 樣例輸入 樣例輸出 提示 對於100%的數據滿足:0 <= A,B <= 50000000 這道題首先要想到有一個因數和公式 f[a] = ( 1 + p1 + p1^2 + . ...


題目描述

給定A,B,求A^B的所有因數的和,再MOD 9901

輸入

一行兩個整數 A 和 B。

輸出

一行,一個整數

樣例輸入

2 3

樣例輸出

15

提示

對於100%的數據滿足:0 <= A,B <= 50000000

 

 

這道題首先要想到有一個因數和公式

f[a] = ( 1 + p1 + p1^2 + .... + p1^q1 ) * ( 1 + p2 + p2^2 + .... + p2^q2 ) * ...... * ( 1 + pn + pn^2 +.....+ pn^qn )

 

由此我們知道,這道題需要分解質因數(唯一分解定理???

A^B可以直接分A,每個分出數的指數再×B就行(這應該都會

所以我們可以先打個素數表..

因為a,b都在50000000,計算器一算7000多的表就夠了..

 

我們再觀察因數和公式,如果一個一個求救太麻煩了,我們就發現了這是等比數列啊!!!

等比數列公式相信大家都會...

因為除數可能為負數,所以式子要上下都×-1整理一下

但這又有可能出現不是整數的情況,我們就需要用乘法逆元了(當時我卡在這了

這裡先貼一個寫的挺好的乘法逆元

inline long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
    if(a==0&&b==0)
        return -1ll;
    if(b==0)
    {
        x=1ll;
        y=0ll;
        return a;
    }
    long long d=extend_gcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
inline long long mod_reverse(long long a,long long n)
{
    long long x,y,d=extend_gcd(a,n,x,y);
    if(d==1)
        return (x%n+n)%n;
    else
        return -1ll;
}

 

 

快速冪和乘法取模就不說了

下麵貼代碼

#include<iostream> 
#include<cstdio> 
#include<cstring> 
#include<cmath> 
#define ll long long 
ll vis[8000]={0}; 
ll ys[8000]={0},zs[8000]={0}; 
ll vis1[8000]={0}; 
ll ac[8000]={0}; 
using namespace std; 
ll n; 
ll qmod(ll i,ll j)  
{  
    ll ans=1;  
    while(j)  
    {  
        if(j&1)  
        {  
            ans*=i;  
            ans%=9901;  
        }  
        i=i*i%9901;  
        j>>=1;  
    }  
    return ans%9901;  
}  
void prime() 
{ 
    ll i,j,k=0; 
    for(i=2;i<=7100;i++) 
    { 
        vis[i]=i; 
    } 
    i=2; 
    while(i*i<=7100) 
    { 
        if(vis[i]!=0) 
        { 
            j=i<<1; 
            while(j<=7100) 
            { 
                if(vis[j]!=0) 
                { 
                    k++; 
                } 
                vis[j]=0; 
                j=j+i; 
            } 
        } 
        i++; 
    }    
} 
int main() 
{ 
    ll k=1; 
    ll i,j; 
    ll A,b; 
    ll a,n; 
    cin>>a>>b; 
    A=a; 
    n=sqrt(a); 
    prime(); 
    for(i=2;i<=n;i++) 
    { 
        while((vis[i]!=0)&&(a%vis[i]==0)) 
        { 
            vis1[i]=1; 
            ys[k]=vis[i]%9901; 
            zs[k]++; 
            a=a/vis[i]; 
        } 
        if(vis1[i]==1) 
        { 
            k++; 
        } 
    } 
    k--; 
    ll step=0; 
    ll re=0,cf=0; 
    if(a!=1&&a!=A) 
    { 
        ys[k+1]=a%9901; 
        zs[k+1]=1; 
        step=1; 
    } 
    else
    if(a==A) 
    { 
        ys[1]=a%9901; 
        zs[1]=1; 
        k=1; 
    } 
    if(step==1) 
    { 
        k++; 
    } 
    ll count=0; 
    for(i=1;i<=k;i++) 
    { 
        if(zs[i]!=0) 
        { 
            zs[i]=zs[i]*b; 
            count++; 
        } 
    } 
    for(i=1;i<=count;i++) 
    { 
        ll a1=qmod(ys[i]%9901,zs[i]+1); 
        a1=a1-1; 
        ll temp=(ys[i]-1)%9901; 
        ll a2=qmod(temp,9899); 
        ac[i]=((a1%9901)*(a2%9901))%9901; 
    } 
    ll sum=ac[1]; 
    for(i=2;i<=count;i++) 
    { 
        sum=((sum%9901)*(ac[i]%9901))%9901; 
    } 
    cout<<sum; 
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //希爾排序 加多一個gap間隔 DEV會崩潰 VC++6.0可以正常運行 #include using namespace std; void InsertSort( int k[], int n ) { int i, j,temp; int gap = n; do { gap = (gap/3)... ...
  • 開始時的首頁 點擊modules 點擊modules界面的Paths 點擊Libraries 選擇lib文件 點擊Facets 選擇項目 這就是我404的主要原因,因為小白第一次使用idea 所以很瘋狂的一直百度,到後面的google搜索,終於在經過1天半的時間找到問題了 web.xml這裡要修改, ...
  • 1.C 和 Java 都是多線程語言。( ) 2.如果線程死亡,它便不能運行。( ) 3.在 Java 中,高優先順序的可運行線程會搶占低優先順序線程。( ) 4.程式開發者必須創建一個線程去管理記憶體的分配。( ) 5.一個線程在調用它的 start 方法,之前,該線程將一直處於出生期。( ) 6.當調 ...
  • 一、自定義攔截器 1.架構 2.攔截器創建 3.攔截器api 4.攔截器配置 二、struts2標簽 1.標簽體系 2.struts2標簽結構 3.控制標簽 準備Action然後再到jsp練習struts2標簽 開始練習控制標簽: 4.數據標簽 5.表單標簽 6.非表單標簽 在action中添加錯誤 ...
  • java 後臺返回一個ModelAndView 對象,然後加入這2行設置 業可以把這二行設置放入JSP中 在jsp代碼如下: ...
  • 呃,一定要理解之後自己敲!!!這幾道題,使我進一步瞭解了介面和抽象類。 1.設計一個商品類 欄位: 商品名稱,重量,價格,配件數量,配件製造廠商(是數組,因為可能有多個製造廠商) 要求: 有構造函數 重寫 toString 方法 重寫 equals方法,進行兩件商品的比較 2.設計一個抽象類,並演示 ...
  • 嗨咯,大家晚上好,我的博客首篇開始了 ,我們一起加油吧! 都說java 語言是非常健壯性 如:垃圾回收機制、記憶體模型、異常處理,強類型轉換、跨平臺,等等,使得Java語言的受到青睞。今天我們先來聊聊java的異常處理機制try catch finally throw throws,平時我們貌似小瞧了 ...
  • 這次數據量在70萬左右。音頻數據包括音頻下載地址,頻道信息,簡介等等,非常多。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...