uva 10375 質數篩選 質數分解 lrj-P316
題意:
求解C(p,q)/ C(r,s),保留五位小數
題解:
劉汝佳老師的程式碼真的很好,思路很清晰,好好品味,好好學習
#include<math.h> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define MAXN 10010 #define LL long long const LL mod=1000000007LL; LL flag[MAXN]; int primer[MAXN],cnt; void get_primer() { flag[0]=flag[1]=1; int sqrtmaxn=(int)sqrt((double)MAXN); for(int i=2;i<MAXN;i++){ if(primer[i]==0){ flag[i]=flag[i-1]; primer[cnt++]=i; if(i<=sqrtmaxn) for(int j=i*i;j<MAXN;j+=i) primer[j]=1; } else flag[i]=(flag[i-1]*i)%mod; } } int e[MAXN]; void add_integer(int n,int d){ for(int i=0;i<cnt;i++){ while(n%primer[i]==0){ n/=primer[i]; e[i]+=d; } if(n==1) break; } } void add_factorial(int n,int d){ for(int i=1;i<=n;i++) add_integer(i,d); } int main() { int p,q,r,s; get_primer(); //freopen("in.txt","r",stdin); while(scanf("%d%d%d%d",&p,&q,&r,&s)!=EOF) { memset(e,0,sizeof(e)); add_factorial(p,1); add_factorial(q,-1); add_factorial(p-q,-1); add_factorial(r,-1); add_factorial(s,1); add_factorial(r-s,1); double ans=1.0; for(int i=0;i<cnt;i++) ans*=pow(primer[i],e[i]); printf("%0.5lf\n",ans); } return 0; }
相關推薦
uva 10375 質數篩選 質數分解 lrj-P316
題意: 求解C(p,q)/ C(r,s),保留五位小數 題解: 劉汝佳老師的程式碼真的很好,思路很清晰,好好品味,好好學習 #include<math.h> #include<s
UVa 10375 - Choose and divide(唯一分解定理)
ide clas 數組 AI AS lin buffered ring buffere 鏈接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p
UVa 10375 Choose and divide (唯一分解定理)
divide include n! reg pan gist inline har class 題目 題目大意 已知\(C(m, n) = m! / (n!(m - n)!)\), 輸入整數\(p\), \(q\), \(r\), \(s\)(\(p ≥ q\), \(r
UVA-10375 唯一分解定理
#include<iostream> #include<string.h> #include<algorithm> #include<math.h> #include<stdio.h> #define rep(i,j,k) for(int i=
Eular質數篩選方法
1.有時候我們給出長度為N的區間需要求解出這個區間中質數的個數,假如使用素數定理來求解出的話時間複雜度可能有點高,因為使用素數定理的時候核心程式碼如下: for(int i = 2;i < x; i++){ &
UVA - 10375(唯一分解定理)
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> using nam
204. Count Primes的C++解法(篩選質數)
題目描述:https://leetcode.com/problems/count-primes/ 埃拉託斯特尼篩法 class Solution { public: int countPrimes(int n) { vector<bool> num(n
質數篩選方法(埃拉託斯特尼篩法)
今天刷題刷了這麼一道題, The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million. 大概意思是10以內的質數加法和為 2
BZOJ 2818 Gcd(尤拉函式+質數篩選)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discuss] De
uva 10375 唯一分解定理 篩法求素數【數論】
唯一分解理論的基本內容: 任意一個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,一個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。 舉個栗子:50=(2^1)*(5^2) 題目一般的思路就是要把素數表打出來,eg上面的例子 e
uva 10375 (唯一分解定理+篩素數)
Choose and divide DescriptionThe binomial coefficient C(m,n) is defined as m! C(m,n) =
uva 10375 Choose and Divide
ans std ble 遍歷 bre color ios 素數 and 將要求的數離散為素數的指數,然後遍歷一遍素數表。。。。 #include <cstdio> #include <iostream> #include <cstring&g
UVA-10375 數學
pro mat logs sin .net pri code urn tdi UVA-10375 題意 : 輸入p,q,r,s,求C(p,q)/C(r,s). p,q,r,s<=10000;結果不超過1e8 代碼: //顯然不能直接計算,考慮每個數都可以
Choose and divide UVA - 10375
cstring div n) define all inpu small you sample Choose and divide UVA - 10375 The binomial coefficient C(m, n) is defined as C(m, n) = m
求n以內的質數(質數的定義:在大於1的自然數中,除了1和它本身意外,無法被其他自然數整除的數)
思路: 1.(質數篩選定理)n不能夠被不大於根號n的任何質數整除,則n是一個質數2.除了2的偶數都不是質數程式碼如下: /** * 求n內的質數 * @param int $n * @return array */ function get_prime($n) { $prime =
51nod 1181 質數中的質數(質數篩法)
原題 參考了網上的大概縷清了思路,用自己的方法做一直都是編譯錯誤,不是很懂,請求大佬指點。 解題思路:首先建立prime[]陣列,用於判斷陣列中的下標所對應的值是質數還是非質數。若為質數,則標記為0,否則標記為1。 從2開始依次判斷,若該數為質數,則計數變數加1,再判斷
UVa 10892 LCM Cardinality (質因數分解)
題目傳送門 題意:輸入一個數n,問若n==LCM(a,b),存在的這種(a,b)共有多少對。 題解:首先先了解一下LCM(a,b)的由來。 將a,b拆分 設max(kai,kbi)=ri; 所以如果a中取ri,則b只能取[0,ri-1],則有ri種; 如果
ACM-ICPC 2018 南京賽區網路預賽-J Sum(線性篩選+因數分解)
A square-free integer is an integer which is indivisible by any square number except 11. For example, 6 = 2 \cdot 36=2⋅3 is square-free, b
java質數判斷/質數因子/所有質數(素數)*
1.質數(素數)數判斷: boolean isPrime(int number) { boolean isPrime = true; for (int i = 2; i
UVA 10375 Choose and divide(組合數學)
Problem D: Choose and divide The binomial coefficient C(m,n) is defined as m! C(m,n) = -------- n!(m-n)! Given four