4704(費馬小定理和同餘定理 ,求超高次冪)
Input
2
Output
2
Hint
1. For N = 2, S(1) = S(2) = 1.2. The input file consists of multiple test cases. Sample Input
2
Sample Output
2
題意: 求出 將 分成 1堆,2堆,...,堆 的結果累加
考慮 將 分成 堆,考慮隔板法,也就是 , 所以結果也就是 , 也就是
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+10; const int mod=1e9+7; char str[maxn]; /* 題目分析: 因為n實在是太大太大了,這可咋辦啊?!n<10^100000。 做這場的時候沒有注意到,也是當時沒有看過什麼是費馬小定理,居然跟模值有關係!mod=1000000007。這個mod有什麼特點呢?它是個質數。 費馬小定理揭示了:當p是一個素數並且a和p互質時,a^(p-1)%p≡1。 那麼在這道題裡a=2,p=mod。顯然滿足費馬小定理。再根據同餘模定理, 那麼a^(n-1)=a^(m+k*(p-1))。因而a^(n-1)%p=1*a^m 這麼我們就可以斷定mod-1是一個迴圈節。先用大數對它取模,然後資料量就可以承受得起了,再用快速冪,這道題就解了! */ ll get_pow_num(int len,int mod){ ll ans=0; for(int i=0;i<len;i++){ ans=((ans*10)%mod+str[i]-'0')%mod; } return ans; } ll pow_mod(ll base,ll n,int mod){ ll ans=1; while(n){ if(n&1) ans=(ans*base)%mod; n/=2; base=(base*base)%mod; } return ans; } int main(){ while(scanf("%s",str)==1){ int len=strlen(str); ll pow_num=(get_pow_num(len,mod-1)-1+mod-1)%(mod-1); ll ans=pow_mod(2,pow_num,mod); printf("%lld\n",ans); } return 0; }
相關推薦
4704(費馬小定理和同餘定理 ,求超高次冪)
Input 2 Output 2 Hint 1. For N = 2, S(1) = S(2) = 1.2. The input file consists of multiple test cases. Sample Input
HUD 4704 Sum 費馬小定理和快速冪
給定s(k)為k的劃分數 求劃分數的個數 比如當n=4時候 s(1)=(4)…………………………1 s(2)=(2,2)(1,3)(3,1)………3 s(3)=(1,1,2)(1,2,1)(2,1,1)……3 s(4)=(1,1,1,1)……………………1 所以是1+3+
HDU 4704 Sum (費馬小定理)
題意: 不知道為什麼java超時: import java.math.BigInteger; import java.util.Scanner; public class Main {
hdu 4704 Sum(費馬小定理)
數論,費馬小定理 a^(p-1) % p == 1,長見識了 #include <cstdio> #include <algorithm> #include <vector> using namespace std; typedef
hdu 4704 Sum(費馬小定理)解題報告
Problem Description Sample Input 2 Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multip
HDOJ 4704 Sum(費馬小定理+快速冪)
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Subm
HDOJ 題目4704 Sum(費馬小定理,快速冪)
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Subm
hdu 4704 sum(費馬小定理+快速冪)
題意: 這題意看了很久。。 s(k)表示的是把n分成k個正整數的和,有多少種分法。 例如: n=4時, s(1)=1 4 s(2)=3 1,3 3,1 2,2 s(3)=3 1,1,2
4704 Sum (費馬小定理 + 快速冪)
Description Sample Input 2 Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of mul
HDU - 1576(費馬小定理求逆元)
math src typedef pow ble inpu show font type 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Othe
2018 CCPC網絡賽 Dream (費馬小定理)
turn adc per -- bottom from ever img making Dream Problem Description Freshmen frequently make an error in computing the power of a sum o
題解報告:hdu 6440 Dream(費馬小定理+構造)
sin hdu 給定 集合 代碼 \n png mes 乘法 解題思路:給定素數p,定義p內封閉的加法和乘法運算(運算封閉的定義:若從某個非空數集中任選兩個元素(同一元素可重復選出),選出的這兩個元素通過某種(或幾種)運算後的得數仍是該數集中的元素,那麽,就說該集合對於
919E - Congruence Equation(費馬小定理)
919E - Congruence Equation 題目大意: 給定 a a a, b b b, x
牛客網-F-發電(費馬小定理+線段樹)
連結:https://www.nowcoder.com/acm/contest/136/F 來源:牛客網 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 262144K,其他語言524288K 64bit IO Format: %lld 題目描述  
HDU 6400(費馬小定理)
傳送門 題面: Freshmen frequently make an error in computing the power of a sum of real numbers, which usually origins from an incorrect equat
淺談逆元及其求法(費馬小定理&Exgcd)
前言 逆元其實是一個很小的知識點,但是在數論中也起到了比較大的作用。這篇文章主要是介紹逆元,和它在一些其他方面的應用。可能我在證明的過程中會出現一些錯誤,如果你在看這篇文章的過程中發現了問題,歡迎在私信或評論中指出! What is 逆元 我們想一個問
逆元(費馬小定理求法)
看程式碼解釋/* 求逆元 費馬小定理 a^(p-1)=1(mod p) 故 a^(p-2)=1/a(mod p) inv(a)(a關於p的逆元)=a^(p-2) */ #include<cstd
HDU 4704 Sum(費馬小定理,組合數學,快速冪)
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub
[HDU 4704] Sum · 費馬小定理 & 快速冪
題意:給定n,設是將n分成k個數之和的方案數,求 隔板原理:將n個物品分成k組,相當於在n-1個間隔中插入k-1個隔板,方案數為,所以等於,貌似是叫二項式定理來著?反正這個式子的值等於,所以就是要求的
hdu 4704 Sum (費馬小定理+快速冪)
//(2^n-1)%mod //費馬小定理:a^n ≡ a^(n%(m-1)) * a^(m-1)≡ a^(n%(m-1)) (mod m) # include <stdio.h> # include <algorithm> # include &l