zoukankan      html  css  js  c++  java
  • hdu-5478 Can you find it(快速幂)

    思路:暴力。

    由于(ak1*n+b1+bk2(n-1)+1)(modC)=0对于任意n为正整数恒成立,那么对于n=1成立可得(ak1+b1+b)(modC)=0;n =2时可得(a2*k1+b1+bk2+1)(modC)=0;

    那么将n=1时所得的等式*ak1(modC)得(a2*k1+b1+b*ak1)(modC)=0;

    那么和n=2时所得的式子比较可得(ak1)(modC)=(bk2)(modC);

    那么由于1<=a,b<C;

    那么从1循环到C枚举a,用快速幂求ak1,ak1+b1,用n=1时的等式求b,快速幂求bk2 ,判断是否(ak1)(modC)=(bk2)(modC);

    下面证明;当a,b符合1,2式时,就(ak1*n+b1+bk2(n-1)+1)(modC)对于任意n为正整数恒成立。

    1式可解得b=(C-(ak1+b1)modC);由1,2式得(ak1)(modC)=(bk2)(modC);

    那么原式可改写为:(ak1*n+b1+ak1(n-1)*(C-(ak1+b1)modC))(modC)=0;

    ==(ak1*n+b1+ak1(n-1)*(C-(ak1+b1))(modC)=0

    ==(C*ak1(n-1))(modC)=0;

    得证。

     时间复杂度为(n*log(n));

     1 #include<algorithm>
     2 #include<stdlib.h>
     3 #include<iostream>
     4 #include<string.h>
     5 #include<math.h>
     6 #include<stdio.h>
     7 typedef long long ll;
     8 ll quick(ll x,ll y);
     9 ll C;
    10 using namespace std;
    11 int main(void)
    12 {
    13     ll i,j,k,p,q;
    14     int e=0;
    15     while(scanf("%lld %lld %lld %lld",&C,&k,&p,&q)!=EOF)
    16     {int flag=0;
    17         e++;
    18         printf("Case #%d:
    ",e);
    19         for(i=1;i<C;i++)
    20         {
    21             ll kk=quick(i,k);//a^k1,
    22             ll k2=quick(i,k+p);//a^(k1+b1)
    23             ll b=(C-k2);//b
    24             ll z=quick(b,q);//b^k2;
    25             if(z==kk)
    26             {flag=1;
    27                 printf("%lld %lld
    ",i,b);
    28             }
    29         }
    30         if(flag==0)
    31         {
    32             printf("-1
    ");
    33 
    34         }
    35 
    36     }
    37     return 0;
    38 
    39 }
    40 
    41 
    42 ll quick(ll x,ll y)//快速幂
    43 {
    44     ll i,j,k;
    45     i=1;
    46     k=x;
    47     while(y)
    48     {
    49         if(y&1)
    50         {
    51             i=(i*k)%C;
    52         }
    53         k=(k*k)%C;
    54         y/=2;
    55     }
    56     return i;
    57 }
    油!油!you@
  • 相关阅读:
    button标签和input button
    获取select标签的值
    window.loaction和window.location.herf
    数组重复计数,对象方法
    js对象详解
    面试经典题型整理
    一些js小知识点整理
    事件委托能够优化js性能
    网页加载的一般顺序
    http状态码
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/4976335.html
Copyright © 2011-2022 走看看