zoukankan      html  css  js  c++  java
  • 【数学】XMU 1597 GCD

    题目链接:

      http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1597

    题目大意

      求(am-bm, an-bn),结果取模1000000007,a,b互质(1<=b < a<= 1018,1<=m,n<=1018)

    题目思路:

      【数论】

      gcd(am-bm,an-bn) mod p=(agcd(m,n)-bgcd(m,n))mod p=(a mod p)gcd(m,n) mod(p-1)-(b mod p)gcd(m,n) mod(p-1)

      快速幂。

     1 //
     2 //by coolxxx
     3 //
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<string>
     7 #include<iomanip>
     8 #include<memory.h>
     9 #include<time.h>
    10 #include<stdio.h>
    11 #include<stdlib.h>
    12 #include<string.h>
    13 #include<stdbool.h>
    14 #include<math.h>
    15 #define min(a,b) ((a)<(b)?(a):(b))
    16 #define max(a,b) ((a)>(b)?(a):(b))
    17 #define abs(a) ((a)>0?(a):(-(a)))
    18 #define lowbit(a) (a&(-a))
    19 #define sqr(a) ((a)*(a))
    20 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
    21 #define eps 1e-8
    22 #define J 10
    23 #define MAX 0x7f7f7f7f
    24 #define PI 3.1415926535897
    25 #define mod 1000000007
    26 using namespace std;
    27 long long n,m,lll,ans,cas;
    28 long long a,b,aa,bb;
    29 long long gcd(long long a,long long b)
    30 {
    31     if(!b)return a;
    32     return gcd(b,a%b);
    33 }
    34 long long quickpow(long long a,long long n)
    35 {
    36     long long c=a,t=1;
    37     while(n)
    38     {
    39         if(n&1)t=(t*c)%mod;
    40         c=(c*c)%mod;
    41         n>>=1;
    42     }
    43     return t;
    44 }
    45 int main()
    46 {
    47     #ifndef ONLINE_JUDGE
    48 //    freopen("1.txt","r",stdin);
    49 //    freopen("2.txt","w",stdout);
    50     #endif
    51     int i,j,k;
    52 //    while(~scanf("%s",s1))
    53 //    while(~scanf("%d",&n))
    54 //    for(scanf("%d",&cas),l=1;l<=cas;l++)
    55     while(~scanf("%lld%lld%lld%lld",&a,&b,&m,&n))
    56     {
    57         a=(a-1)%mod+1;
    58         b=(b-1)%mod+1;
    59         lll=gcd(m,n)%(mod-1);
    60         aa=quickpow(a,lll);
    61         bb=quickpow(b,lll);
    62         ans=(aa-bb+mod)%mod;
    63         printf("%lld
    ",ans);
    64     }
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    string用法
    动手动脑
    你已经创建了多少个对象?
    动手动脑
    课程作业2
    课程作业1
    课程作业2
    《大道至简》第一章观后感
    java虚拟机内存区域
    Gitbook安装使用教程
  • 原文地址:https://www.cnblogs.com/Coolxxx/p/5500590.html
Copyright © 2011-2022 走看看