gcd,lcm,ext_gcd,inv

Least Common Multiple http://acm.hdu.edu.cn/showproblem.php?pid=1019

 1 #include<cstdio>
 2 int gcd(int a,int b){
 3     return b?gcd(b,a%b):a;
 4 }
 5 int lcm(int a,int b){
 6     return a/gcd(a,b)*b;
 7 }
 8 int main(){
 9     int n,m,ans,x;
10     while(~scanf("%d",&n)){
11         while(n--){
12             ans=1;
13             scanf("%d",&m);
14             while(m--){
15                 scanf("%d",&x);
16                 ans=lcm(ans,x);
17             }
18             printf("%d\n",ans);
19         }
20     }
21     return 0;
22 }

Turn the pokers http://acm.hdu.edu.cn/showproblem.php?pid=4869

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 typedef __int64 LL;
 5 const int M=100010;
 6 const int mod=1000000009;
 7 int ext_gcd(int a,int b,int &x,int &y){//扩展gcd d=gcd(a,b)=a*x+b*y; return d,x,y;
 8     int t,ret;
 9     if(!b){
10         x=1;
11         y=0;
12         return a;
13     }
14     ret=ext_gcd(b,a%b,x,y);
15     t=x;
16     x=y;
17     y=t-a/b*y;
18     return ret;
19 }
20 int inv(int a,int b,int c){//ext_gcd求逆元 (b/a)%c
21     int x,y;
22     ext_gcd(a,c,x,y);
23     return (1LL*x*b%c+c)%c;
24 }
25 LL C[M];
26 LL INV[M];
27 int main() {
28     for(int i=1; i<M; i++) {
29         INV[i]=inv(i,1,mod);
30     }
31     int n,m,a;
32     while(~scanf("%d%d",&n,&m)) {
33         C[0]=1;
34         for(int i=1;i<=m;i++){
35             C[i]=C[i-1]*(m-i+1)%mod*INV[i]%mod;
36         }
37         int L=0,R=0,nl,nr,tmp;
38         for(int i=0;i<n;i++){
39             scanf("%d",&a);
40             tmp=min(m-L,a);
41             nr=L+tmp-(a-tmp);
42             tmp=min(R,a);
43             nl=R-tmp+(a-tmp);
44             if(nl>nr) swap(nl,nr);
45             if(L<=a&&a<=R){
46                 if(L%2==a%2){
47                     nl=0;
48                 }
49                 else{
50                     nl=min(nl,1);
51                 }
52             }
53             if((m-R)<=a&&a<=(m-L)){
54                 if((m-L)%2==a%2){
55                     nr=m;
56                 }
57                 else{
58                     nr=max(nr,m-1);
59                 }
60             }
61             if(L>=a) nl=min(nl,L-a);
62             if(m-R>=a) nr=max(nr,R+a);
63             L=nl;
64             R=nr;
65         }
66         int ans=0;
67         for(int i=L;i<=R;i+=2){
68             ans+=C[i];
69             ans%=mod;
70         }
71         printf("%d\n",ans);
72     }
73     return 0;
74 }

end

gcd,lcm,ext_gcd,inv

时间: 2024-10-29 04:16:35

gcd,lcm,ext_gcd,inv的相关文章

HDU 4497 GCD and LCM (数学,质数分解)

题意:给定G,L,分别是三个数最大公因数和最小公倍数,问你能找出多少对. 析:数学题,当时就想错了,就没找出规律,思路是这样的. 首先G和L有公因数,就是G,所以就可以用L除以G,然后只要找从1-(n=L/G),即可,那么可以进行质因数分解,假设: n = p1^t1*p2^t2*p3^t3;那么x, y, z,除以G后一定是这样的. x = p1^i1*p2^i2*p3^i3; y = p1^j1*p2^j2*p3^j3; z = p1^k1*p2^k2*p3^k3; 那么我们可以知道,i1,

ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄? ̄))

gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •?∀•? ) 简写你懂吗) 解释(不想看就跳过){ 首先,求一个gcd,然后... a / gcd 和 b / gcd 这两个数互质了,也就是 gcd(   a / gcd ,b / gcd  )  =  1,然后... lcm = gcd *  (a / gcd) * (b / gcd) lcm = (a *

BZOJ2818 GCD 【欧拉函数,线性筛】

题目大意: 给一个范围[1,n],从中找出两个数x,y,使得gcd(x,y)为质数,问有多少对(x,y有序) 解法: 不难,欧拉函数练手题,可以定义集合P ={x|x为素数},那么我们枚举gcd(x,y)可能等于的情况,对于任意p∈P可以得到:gcd(k1·p,k2·p) = p,当且仅当gcd(k1,k2) =1;那么我们就只需要枚举所有的k1,k2了.不妨设k1>k2,那么给定k1,k2的个数就是phi(k1),因为有序,所以给phi*2,但是,这样是否漏算了呢?没错,漏算了(1,1),补上

猫猫学iOS(五十)多线程网络之GCD简单介绍(任务,队列)

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为"牛逼的中枢调度器" 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务

GCD SUM 强大的数论,容斥定理

GCD SUM Time Limit: 8000/4000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description 给出N,M执行如下程序:long long  ans = 0,ansx = 0,ansy = 0;for(int i = 1; i <= N; i ++)   for(int j = 1; j <= M; j ++)       if(gcd(i,j)

iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一个操作,在串行队列中,可以把最后需要执行的block放在队列最后即可,但是在并行队列中,可以用dispatch_group,最后通过dispatch_group_notify来执行最后要执行的block. 待编辑,补充例子.

[ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)

Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael can control the elements and combine them to invoke a powerful skill. Vance like Kael very much so he changes the map to make Kael more powerful. In

[ACM] hdu 3923 Invoker (Poyla计数,快速幂运算,扩展欧几里得或费马小定理)

Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael can control the elements and combine them to invoke a powerful skill. Vance like Kael very much so he changes the map to make Kael more powerful. In

HDU5957 Query on a graph(拓扑找环,BFS序,线段树更新,分类讨论)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5957 题意:D(u,v)是节点u和节点v之间的距离,S(u,v)是一系列满足D(u,x)<=k的点的集合,操作1:将S(u,k)内节点权值增加或者减小,操作2:查询S(u,k)内节点的权值和 题解:因为题目说了查询和更新的距离小于等于k,k最大为2,所以很显然要分情况讨论k为0.1.2的情况 因为是多次更新,我们显然是需要用线段树来维护节点权值的 运用线段树和bfs序的知识我们知道 对一个棵树求BFS