zoukankan      html  css  js  c++  java
  • 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
    ",ans);
    19         }
    20     }
    21     return 0;
    22 }
    View Code

    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
    ",ans);
    72     }
    73     return 0;
    74 }
    View Code
     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 LL C[M];
     8 LL INV[M];
     9 void inv_init(){//初始化%mod的乘法逆元
    10     INV[1]=1;
    11     for(int i=2;i<M;i++){
    12         INV[i]=INV[mod%i]*(mod-mod/i)%mod;
    13     }
    14 }
    15 int main() {
    16     inv_init();
    17     int n,m,a;
    18     while(~scanf("%d%d",&n,&m)) {
    19         C[0]=1;
    20         for(int i=1;i<=m;i++){
    21             C[i]=C[i-1]*(m-i+1)%mod*INV[i]%mod;
    22         }
    23         int L=0,R=0,nl,nr,tmp;
    24         for(int i=0;i<n;i++){
    25             scanf("%d",&a);
    26             tmp=min(m-L,a);
    27             nr=L+tmp-(a-tmp);
    28             tmp=min(R,a);
    29             nl=R-tmp+(a-tmp);
    30             if(nl>nr) swap(nl,nr);
    31             if(L<=a&&a<=R){
    32                 if(L%2==a%2){
    33                     nl=0;
    34                 }
    35                 else{
    36                     nl=min(nl,1);
    37                 }
    38             }
    39             if((m-R)<=a&&a<=(m-L)){
    40                 if((m-L)%2==a%2){
    41                     nr=m;
    42                 }
    43                 else{
    44                     nr=max(nr,m-1);
    45                 }
    46             }
    47             if(L>=a) nl=min(nl,L-a);
    48             if(m-R>=a) nr=max(nr,R+a);
    49             L=nl;
    50             R=nr;
    51         }
    52         int ans=0;
    53         for(int i=L;i<=R;i+=2){
    54             ans+=C[i];
    55             ans%=mod;
    56         }
    57         printf("%d
    ",ans);
    58     }
    59     return 0;
    60 }
    View Code

    end

  • 相关阅读:
    面试8:找二叉树的下个结点
    面试8:找二叉树的下个结点
    面试题7:重建二叉树
    面试题7:重建二叉树
    Kenneth A.Lambert著的数据结构(用python语言描述)的第一章课后编程答案
    基础的Mapgis三维二次开发-插件式
    面试题6:从尾到头打印链表
    C语言中声明和定义详解(待看。。
    面试题5:替换空格
    面试题5:替换空格
  • 原文地址:https://www.cnblogs.com/gaolzzxin/p/3888132.html
Copyright © 2011-2022 走看看