【帶除法的取模運算】hnoi2009有趣的數列
題目本身很簡單,有意識的人會打個表輕易地可以發現是個卡特蘭數列。
眾所周知卡特蘭數列的最普通的遞推式是O(N^2)的,資料規模是1000000,很顯然過不了,卡特蘭數列第i項還有另外一個公式就是C(n,2n)/(n+1),這個除法怎麼辦?我們所知的取模運算是不滿足除法的,那應該怎麼辦?一個最直觀的想法就是分解質因數,然後對於每一個質數分別求出它的指數。通過對每個數進行質因數分解是不現實的,複雜度高達O(N^1.3),1000000的資料顯然過不了。
ly給了我一個非常漂亮的演算法:假設現在我對於數字 i ,要把他的 j 次方加到答案中去,若k是 i 的一個質因子,那麼我只要把任務交給k和i/k就可以了,因為i^j=k^j+(i/k)^j,輪到算k或者i/k的時候只要把他的指數+上 j 即可,如果 i 是質數,直接加答案即可,因為最後的答案為整數,那麼必定i的指數是正數。
至此我們的任務就只有對於資料規模中的數求出它的一個質因子即可,這讓我們想到了複雜度優秀的篩選法(O(N)),至此此題完美解決,而且演算法非常漂亮!!
傾情感謝ly童鞋!
相關推薦
【帶除法的取模運算】hnoi2009有趣的數列
題目本身很簡單,有意識的人會打個表輕易地可以發現是個卡特蘭數列。 眾所周知卡特蘭數列的最普通的遞推式是O(N^2)的,資料規模是1000000,很顯然過不了,卡特蘭數列第i項還有另外一個公式就是C(n,2n)/(n+1),這個除法怎麼辦?我們所知的取模運算是不
【效能優化】取模運算:x%n,當n是偶數時,可以用x&(n-1)替代
#include <assert.h> void modulo_operation_opt() { int m = 100000; int n = 100000; double a
【未完成】除法取模、逆元、擴充套件歐幾里得演算法
1.+,-,*都可以直接取模,但是除法不可以(模素數相當於換了數域,因為數域變成了有限域,有限域上沒有除法,要換成乘以逆元)。 2.除法取模要變成乘它的逆元。 a * x MOD m == 1則稱X為A關於模m的乘法逆元,其中a和m必須互素。 3.當m為素數時可以使用
UVa 11582 Colossal Fibonacci Numbers! 【大數冪取模】
term sign fontsize name fib sep iss style watermark 題目鏈接:Uva 11582 [vjudge] 題意 輸入兩個非負整數a、b和正整數n(0<=a,b<=2^64,1<=n<=1000
給定A, B兩個整數,不使用除法和取模運算,求A/B的商和餘數
第一種辦法: 從小到大遍歷 for(i = 2 to A - 1) if(i * B > A) 商 = i- 1, 餘 = A - (i -1) * B 第二種辦法 二分法,在[2, A]中查詢滿足的解 第三種辦法 以除數為初始測試值,以2的指數
HDU-5363 Key Set 【快速冪取模+遞推】
Key Set Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u Submit Status Description soda has a
Leetcode 29. Divide Two Integers--兩個32位整數相除,小數位截斷,不能使用乘法、除法、取模運算
Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the qu
HDU 1005 Number Sequence【迴圈節(取模)】
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 158149 Ac
超級快速冪【費馬小定理】+【快速冪取模】
超級快速冪 Time Limit: 3000/1000 MS(Java/Others)Memory Limit:65536/65536 K (Java/Others) Descripti
HDU 3944 DP? 【組合數取模+階乘預處理】
題意:從楊輝三角頂部走到的第n行第m列有很多種走法,求出這些走法中所經過的數之和的最小值。 首先稍加分析得出答案的組合表示式 C(n+1,m+1,p)+m (mod p) 這是在2m>n時的結
除法的取模運算
逆元: 若,b*b1 % c == 1 則,b1稱為b模c的乘法逆元。 在ACM中,許多除法取模都要用到求逆元。 但是,逆元,為什麼能給我們帶來 ( a/b ) % c == ( a*b1 ) % c ??? (當然a/b要整除) 要知道,取模等式等價變形
CodeForces-630 M. Turn【求模運算】
Vasya started working in a machine vision company of IT City. Vasya's team creates software and hardware for identification of people by their face. One
取模運算
add 結合 重要 nbsp left 但是 list padding 四則運算 腦子不好使,老是記不住(?_?),備忘一下。 模運算與基本四則運算有些相似,但是除法例外。其規則如下: (a + b) % p = (a % p + b % p) % p (a -
【帶權並查集】HDU 3047 Zjnu Stadium
void mem ios ack string blank iostream style csdn http://acm.hdu.edu.cn/showproblem.php?pid=3047 【題意】 http://blog.csdn.net/hj1107402232/a
分數的乘法逆元和負數的取模運算
好的 分數 多少 研究 法則 表達 求余 推導 模運算 1.乘法逆元 A.定義 如果ax≡1 (mod p),且gcd(a,p)=1(a與p互質),則稱a關於模p的乘法逆元為x。 既然有ax≡1 (mod p),那麽有ax - py = 1,x是a關於模p的乘法逆元
【BZOJ1485】[HNOI2009]有趣的數列(組合數學)
sin printf fin std 個數 有趣 clu using -i 【BZOJ1485】[HNOI2009]有趣的數列(組合數學) 題面 BZOJ 洛谷 題解 從小往大填數,要麽填在最小的奇數位置,要麽填在最小的偶數位置。 偶數位置填的數的個數不能超過奇數位置填的數
Hdu 1395 2^x mod n = 1 取模運算
Problem Description Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1. Input One positive integer on ea
取模運算和取餘運算
對於整型數a,b來說,取模運算或者求餘運算的方法都是: 1.求整數商: c = a/b; 2.計算模或者餘數: r = a - c*b. 求模運算和求餘運算在第一步不同: 取餘運算在取c的值時,向0方向舍入(fix()函式);而取模運算在計算c的值時,向-∞方向舍入(f
多項式求逆與多項式除法/取模
多項式求逆 Procedure 多項式求逆是多項式模組中的一個重要操作(“操作”這個詞看出如今多項式題是多麼的工業化,猶如毒瘤8操作LCT),在做生成函式/多項式除法、多項式取模/多項式多點求值等中均有應用 對於一個n次多項式
poj 2492 A Bug's Life【帶權並查集】
就是給一個無向圖判是否有奇環 用帶權並查集來做,邊權1表示連線的兩個節點異性,否則同性,在%2意義下進行加法運算即可,最後判相同的時候也要%2,因為可能有負數 #include<iostream> #include<cstdio> using namespace std; const