HDU - 人见人爱A^B

Description

求A^B的最后三位数表示的整数。 
说明:A^B的含义是“A的B次方”

Input

输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。

Output

对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。

Sample Input

2 3
12 6
6789 10000
0 0

Sample Output

8
984
1

-----------------------------------------------------我是分割线^_^--------------------------------------------------------------------

要特别注意一个结论:a*b%c = a%c * b%c.(也可以等于(a%c * b%c)%c,因为可能影响到结果)这是一个快速幂取模的模板,除此之外还有快速乘取模,之后有一个题会说到
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
using namespace std;

int main()
{
    //freopen("input.txt", "r", stdin);
    int a, b;
    while (scanf("%d%d", &a, &b), a || b) {
        int ans = 1;
        a %= 1000;
        while (b > 0) {//快速幂取模

            if (b % 2 == 1) {
                ans = (ans * a) % 1000;//如果幂的次数是奇数,就优先一步乘入结果,让幂的次数变偶数
            }
            b>>=1;
            a = (a * a) % 1000;//例如让2的四次方变成4的二次方,从而减少运算次数
        }
        printf("%d\n", ans);
    }
    return 0;
}
 
时间: 2024-10-24 03:32:21

HDU - 人见人爱A^B的相关文章

HDU 2034 人见人爱A-B

/* 中文题意: 中文翻译: 题目大意:将a集合中和b集合中相同的全部去除,留下所有和b集合不相同,并将其输出 解题思路:看懂题意,直接写下来就可以了. 难点详解:看清题意,避免不必要的PE错误. 关键点:排序和找到和B集合相同的数如何处理. 解题人:lingnichong 解题时间:2014/07/30    17:39:37 写 解题感受: */ 人见人爱A-B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/327

hdu 2033 人见人爱A+B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2033 题目大意:类似于a+b,只不过换成了时间的加减,超过60减去,然后在相应的分和时加一!没有太大的格式要求~ 1 #include <stdio.h> 2 int main () 3 { 4 int AH,AM,AS,BH,BM,BS,H,M,S,N; 5 scanf ("%d",&N); 6 while (N--) 7 { 8 H=M=S=0; 9 scanf(&

hdu 2035 人见人爱A^B

人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 34306    Accepted Submission(s): 23290 Problem Description 求A^B的最后三位数表示的整数. 说明:A^B的含义是“A的B次方” Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A

hdu 2034人见人爱A-B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2034 解题思路:set的基本用法 1 #include<iostream> 2 #include<string.h> 3 #include<stdio.h> 4 #include<set> 5 using namespace std; 6 7 int main() 8 { 9 int num1,num2,n; 10 while(scanf("%d %d

hdu 2033 人见人爱A+B (java)

问题: 在for循环时习惯用元素i,以至于换成别的时老是用i,在每次for循环时请多注意该循环的元素是否一致. 在m,y有值的情况下习惯性将它当零直接赋值了,请注意!! 人见人爱A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 30111    Accepted Submission(s): 20076 Problem Descr

hdu 2035 人见人爱A^B (java)

问题: 此题需要用到大数来储存,但int还是能装下输入的n,m所以并没必要用BigInteger来装. 在开始用BigInteger装n时,即使将0转化成BigInteger型,用于判断0的if语句并没有效果,原因不明. 一些用于处理大数的函数: Ⅰ基本函数: 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger b=BigInteger.valueOf(a); 则b=3; String s="12345"; BigIntege

hdu 2034 人见人爱A-B (java)

问题: 题目要求排序之前没将a[]数组排序,导致一直不通过. 本题采用了String储存需要的数组元素,输出方便,也比较灵活. 人见人爱A-B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 53264    Accepted Submission(s): 15008 Problem Description 参加过上个月月赛的同学一定还

HDU 2034 人见人爱A—B

题目意思就是让你求两个集合A和B(A如果有B也有的话,输出B没有的A有的,如果A有的B都没有,直接输出NULL). #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int main() { int n,m,i,j,sum,k; int a[200],b[200],c[200]; while(scanf("%d%d",&n,&

人见人爱A^B nefu 444

人见人爱A^B Problem : 444 Time Limit : 1000ms Memory Limit : 65536K description 求A^B的最后三位数表示的整数. 说明:A^B的含义是“A的B次方” input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理. output 对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行. sample_input 2