zoukankan      html  css  js  c++  java
  • nyist 640 Geometric sum

    题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=640

    求x+x^1+x^2+....x^n  %c

    当n为基数时;

    这个式子 sum(x,n)= sum(x,n/2) * pow(x,n/2+1) +x

    sum = (sum + x )%c

    n为偶数时

    sum(x,n) = sum(x,n/2) * pow(x,n/2) +1

    然后使用快速幂,乘得出结果(其实我yy了一下的,一开始没有想到。。。。。。。。)

     1 #include <stdio.h>
     2 
     3 long long chenfa(long long a,long long b,long long c)//a*b%c
     4 {
     5     long long tmp = 0;
     6     a %= c;
     7     b %= c;
     8     while(a)
     9     {
    10         if(a&1)
    11             tmp = (tmp+b)%c;
    12         a >>=1;
    13         b <<=1;
    14         b %= c;
    15     }
    16     return tmp;
    17 }
    18 
    19 long long pow1(long long a,long long b,long long c)//a^b%c
    20 {
    21     long long tmp = 1;
    22     while(b)
    23     {
    24         if(b&1)
    25          tmp = chenfa(a,tmp,c);
    26 
    27          b >>= 1;
    28          a = chenfa(a,a,c);
    29     }
    30     return tmp;
    31 }
    32 
    33 long long sum(long long a,long long b,long long c)//a +a^1 + a^2...+a^b %c
    34 {
    35     long long tmp = 0;
    36     if(b == 1)
    37      {
    38          tmp = a%c;
    39      }
    40      else
    41      {
    42     if(b&1)
    43      {
    44          tmp = chenfa(sum(a,b/2,c),pow1(a,b/2+1L,c)+a,c);
    45          tmp = (tmp +a )%c;
    46      }
    47      else
    48      {
    49          tmp = chenfa(sum(a,b/2,c),pow1(a,b/2,c)+1L,c);
    50      }
    51 
    52      return tmp;
    53      }
    54 }
    55 int main()
    56 {
    57     long long a,b,c;
    58     while(scanf("%lld%lld%lld",&a,&b,&c) != EOF)
    59     {
    60         printf("%lld\n",sum(a,b,c));
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    Node Express4.x 片段视图 partials
    SVG知识难点
    MongoDB的安装和配置成服务的三种方法和一些难点
    git的使用
    单击获取索引的两种方式
    IOTA初识
    开始写博客啦
    虚拟化技术
    可信计算概论
    负载均衡
  • 原文地址:https://www.cnblogs.com/yyroom/p/3022532.html
Copyright © 2011-2022 走看看