BZOJ3884: 上帝與集合的正確用法(歐拉函數 擴展歐拉定理)

来源:https://www.cnblogs.com/zwfymqz/archive/2018/07/18/9327077.html
-Advertisement-
Play Games

Description 根據一些書上的記載,上帝的一次失敗的創世經歷是這樣的: 第一天, 上帝創造了一個世界的基本元素,稱做“元”。 第二天, 上帝創造了一個新的元素,稱作“α”。“α”被定義為“元”構成的集合。容易發現,一共有兩種不同的“α”。 第三天, 上帝又創造了一個新的元素,稱作“β”。“β ...


Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 3860  Solved: 1751
[Submit][Status][Discuss]

Description

  根據一些書上的記載,上帝的一次失敗的創世經歷是這樣的: 第一天, 上帝創造了一個世界的基本元素,稱做“元”。 第二天, 上帝創造了一個新的元素,稱作“α”。“α”被定義為“元”構成的集合。容易發現,一共有兩種不同的“α”。 第三天, 上帝又創造了一個新的元素,稱作“β”。“β”被定義為“α”構成的集合。容易發現,一共有四種不同的“β”。 第四天, 上帝創造了新的元素“γ”,“γ”被定義為“β”的集合。顯然,一共會有16種不同的“γ”。 如果按照這樣下去,上帝創造的第四種元素將會有65536種,第五種元素將會有2^65536種。這將會是一個天文數字。 然而,上帝並沒有預料到元素種類數的增長是如此的迅速。他想要讓世界的元素豐富起來,因此,日復一日,年復一年,他重覆地創造著新的元素…… 然而不久,當上帝創造出最後一種元素“θ”時,他發現這世界的元素實在是太多了,以致於世界的容量不足,無法承受。因此在這一天,上帝毀滅了世界。 至今,上帝仍記得那次失敗的創世經歷,現在他想問問你,他最後一次創造的元素“θ”一共有多少種? 上帝覺得這個數字可能過於巨大而無法表示出來,因此你只需要回答這個數對p取模後的值即可。 你可以認為上帝從“α”到“θ”一共創造了10^9次元素,或10^18次,或者乾脆∞次。   一句話題意:

 

 

Input

  接下來T行,每行一個正整數p,代表你需要取模的值

 

Output

T行,每行一個正整數,為答案對p取模後的值

 

Sample Input

3
2
3
6

Sample Output

0
1
4

HINT

 

對於100%的數據,T<=1000,p<=10^7
 

 

 

Source

By PoPoQQQ

 

擴展歐拉定理$a^p \equiv a^{p \% \phi(M) + \phi(M)} \pmod {M}$

歐拉函數:1. 當$N > 3$時,$\phi(N)$為偶數

     2.若$N$為偶數,則$\phi(N) <= \frac{N}{2}$

然後直接暴力算就行了,很顯然不會超過$logp$層

#include<cstdio>
#include<map>
#include<cstring>
using namespace std;
const int MAXN = 1e7 + 10;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9')x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int mp[MAXN];
int GetPhi(int x) {
    int ans = x;
    for(int i = 2; i * i <= x; i++) {
        if(!(x % i)) {
            ans = ans / i * (i - 1);
            while(!(x % i)) x /= i;
        }
    }
    if(x > 1) ans = ans / x * (x - 1);
    return ans;
} 
int fastpow(int a, int p, int mod) {
    int base = 1;
    while(p) {
        if(p & 1) base = (1ll * base * a) % mod;
        a = (1ll * a * a) % mod; p >>= 1;
    }
    return base % mod;
}
int F(int mod) {
    if(mp[mod] != -1) return mp[mod];
    int phi = GetPhi(mod); 
    return mp[mod] = fastpow(2, F(phi) + phi, mod);
}
int main() {
    memset(mp, -1, sizeof(mp));
    int QwQ = read();
    mp[1] = 0; 
    while(QwQ--) {
        int mod = read();
        printf("%d\n", F(mod));
        //printf("%d\n", GetPhi(mod));
    }
    return 0;
}

 


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

-Advertisement-
Play Games
更多相關文章
  • CSS介紹 CSS:層疊樣式表:Cascading Style Sheets:修改HTML樣式 CSS引用 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>引用CSS</title> <!-- 第一種:外部樣 ...
  • 表單輸入綁定、組件基礎 目標: 1. 熟練掌握vue中表單的處理方式 2. 對之前學習的內容簡單回顧一下,並寫一個實例,學以致用(最好脫離文檔) vue中表單的處理方式 1. vue中表單的處理使用了v model指令, 這個指令可以直接把一個數據綁定到表單元素中的value,checked,sel ...
  • list1 list2 list3 list4 ...
  • 兩種常用方式。 一、URL傳值 看下官方API文檔: 官方提供了5種頁面間的跳轉方式,其中前四種跳轉的時候帶有url參數,用於指定跳轉的頁面地址,而其中前三種url中可以帶有參數。 以此來實現頁面跳轉時候的參數傳值。 1、頁面傳基本數據格式的方式 將參數添加到url部分 以 ?屬性名=屬性值 的形式 ...
  • 1.背景:原先node是官網下載安裝的,通過brew更新了下,然後到項目里npm i 安裝包時候,報錯2.解決:卸載官網下載安裝的node,重裝 ...
  • 一、引入 之前一個離職的同事負責的項目大量的引入了AngularJS的JS框架,後來我接手相關他項目里的功能。由於對AngularJS不是太熟,在他的功能上進行二次開發就比較費勁了,印象比較深的一個就是如何創建並初始化一個Select選擇框。最近我又研究了一下AngularJS,研究出一個個人覺得比 ...
  • 緩存是分散式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。 一、緩存概述 緩存是分散式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。 1.1緩存的原理 (1) 將數據寫入/讀取速度更快的存儲(設備 ...
  • 01 基礎加強六天02 資料庫四天03 SQL和ADO三天04 JavaScript05 DOM06 JQuery07 .NET就業班-三層項目+SVN五天08 ASP.NET十一天09 圖書商城項目五天10 EF11 MVC兩天12 OA項目九天13 就業培訓14 win10APP開發15 Uni ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...