zoukankan      html  css  js  c++  java
  • NKOJ1236 a^b (数论定理的应用)

                                                                              a^b

    对于任意两个正整数a,b(0<=a,b<10000)计算a^b各位数字的和的各位数字的和的各位数字的和的各位数字的和。

    Input 
    输入有多组数据,每组只有一行,包含两个正整数a,b。最后一组a=0,b=0表示输入结束,不需要处理。

    Output 
    对于每组输入数据,输出ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。

    Sample Input

    2 3
    5 7
    0 0
    

    Sample Output

    8
    5

    思路:
      数论定理:任何数除以9的余数等于各位数的和除以9的余数
    证明:
    s = a1a2...an = a1*10^(n-1)+a2*10^(n-2)+...+an
                  = a1*(999..9+1)+a2*(999..9+1)+...+an
                  =(a1*999..9+a2*999..9+...+a(n-1)*9)+(a1+a2+...+an) 
    因为:
        (a1*999..9+a2*999..9+...+a(n-1)*9)%9 = 0;

    所以:
        s%9=(a1+a2+...+an)%9;
     

    代码如下:

     1 #include <stdio.h>
     2 #include <iostream>
     3 using namespace std;
     4 int power(int a,int b)    // 快速幂求余
     5 {
     6     a %=9;
     7     int ans = 1;
     8     while(b>0)
     9     {
    10         if(b%2==1)
    11             ans=(ans*a)%9;
    12         b=b/2;
    13         a=(a*a)%9;
    14     }
    15     return  ans;
    16 }
    17 int main()
    18 {
    19     int a,b;
    20     while(cin>>a>>b)
    21     {
    22         if(a==0&&b==0)
    23             break;
    24         int angs = power(a,b);
    25         if(angs==0)
    26             cout<<"9"<<endl;
    27         else
    28             cout<<angs<<endl;
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    C51学习笔记
    Keil C51与Keil ARM共存
    keil c51笔记
    css实现三角形
    微信小程序倒计时实现
    微信小程序公共组件的引用与控制
    mac上查找nginx安装位置
    charles抓取移动端app数据
    封装react组件——三级联动
    前端基础(http协议相关篇)
  • 原文地址:https://www.cnblogs.com/LGJC1314/p/6771555.html
Copyright © 2011-2022 走看看