1. 程式人生 > >HDOJ 題目4704 Sum(費馬小定理,快速冪)

HDOJ 題目4704 Sum(費馬小定理,快速冪)

Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1320    Accepted Submission(s): 570


Problem Description

Sample Input 2
Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cases.
Source
Recommend zhuyuanchen520   |   We have carefully selected several similar problems for you:  
4955
 4954 4953 4952 4951  思路:

一道整數劃分題目,不難推出公式:2^(n-1),

根據費馬小定理:(2,MOD)互質,則2^(p-1)%p=1;

由於n非常大,所以這裡要用到費馬小定理:a^n%m ≡ (a^(n%(m-1)) * a^(m-1))%m=a^(n%(m-1)) %m
 ac程式碼
#include<stdio.h>
#include<math.h>
#include<string.h>
#define mod 1000000007
__int64 fun(__int64 a,__int64 n)
{
	__int64 s=1;
	while(n)
	{
		if(n%2)
			s=s*a%mod;
		a=a*a%mod;
		n/=2;
	}
	return s;
}
int main()
{
	char s[1000000];
	while(scanf("%s",s)!=EOF)
	{
		__int64 sum=0; int i,len=strlen(s);
		getchar();
		for(i=0;i<len;i++)
		{
			sum=(sum*10+s[i]-'0')%(mod-1);//注意這種對字串求餘的方式
		}
		printf("%I64d\n",fun(2,sum-1));
	}
}


相關推薦

HDOJ 題目4704 Sum定理快速

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm

hdu 4549 M斐波那契數列定理+矩陣快速

F(n)=a^F(n-1)*b^F(n-2)%mod 因為a和b都與mod互素,因此用費馬小定理可以得到 F(n)=a^(f(n-1)%mod-1)*b^(f(n)%mod-1) %mod

HDOJ 4704 Sum定理+快速

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm

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

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

M斐波那契數列 定理 + 二分快速 + 矩陣快速

M斐波那契數列F[n]是一種整數數列,它的定義如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 現在給出a, b, n,你能求出F[n]的值嗎? Input 輸入包含多組測試

Codeforces Round #338 (Div. 2) D Multipliers(定理快速)

#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #inclu

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(隔板+定理·大數取模)

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1907    Accepted Submis

HDU4704:Sum定理 & 隔板法

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Su

hdu 4704 sum 大整數取模+定理+數快速

求輸入的n可以有幾種拆分情況: 如: 2-->(2,11)2種 3-->(3,21,12,111)4種 4-->(4,31,13,22,211,112,121,1111)8種 發現規律 結果 = 2^(n-1),再取模得到要求的即為 2^(n-1)%mod

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

HDOJ 4549 M斐波那契數列 定理+矩陣快速

MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i )   ( i>=3) mod 1000000007 是質數 , 根據費馬小定理  a^phi( p ) = 1

HDU --- 4549 M斐波那契數列 【定理+矩陣快速

傳送門 思路: 通過把前面幾項手推出來可以發現, 其次方項符合斐波那契數列, 又因為資料非常大, 所以就可以想到用矩陣快速冪去求得次方項, 需要注意的就是我們求的是次方, 而答案是取的某個數的該次方, 而a^b % p != a^(b%p) % p, 所以就

HDU 4549 M斐波那契數列 (定理+矩陣快速)

分析: 寫出F[n]的幾項之後發現a和b的指數和斐波那契數列有關      具體的關係是      F[n]=a^fib[n-1] * b^fib[n]      矩陣快速冪求fib    快速冪求a和b的n次冪 題目要求對F[n]%mod    這

HDU 4704 Sum(定理組合數學快速)

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub

HDU 4704 Sum 定理+快速

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm