GDUFE-OJ 1203 快速幂

嘿嘿今天学了快速幂也~~

Problem Description:

   求x的y次方的最后三位数 。  

Input:

一个两位数x和一个两位数y。

Output:

输出x的y次方的后三位数。

Sample Input:

13 13

Sample Output:

253思路:快速幂求a^b,然后mod c。因为是随便输入的a,b,所以范围很大,而题目只需求最后三位,所以百位以上的计算不用理了,直接%1000。
 1 #include <stdio.h>
 2 int main()
 3 {
 4     unsigned long long a,b;
 5     while(scanf("%llu%llu",&a,&b)!=EOF)
 6     {
 7         unsigned long long c=1,d=a;
 8         while(b!=0)
 9         {
10         if(b&1!=0)//如果是0则无需计算,因为n*1=n
11             c*=d%1000;
12             d*=d%1000;
13             b>>=1;
14         }
15         if(c%1000>99)
16         printf("%llu\n",c%1000);
17         else if(c%1000>9)
18         printf("0%llu\n",c%1000);
19         else
20         printf("00%llu\n",c%1000);
21     }
22     return 0;
23 }

Tip:以上mod c是因为怕数字过大爆了,一是因为a的b次mod c,二是因为早晚要mod c,所以早mod 无所谓。

小知识:

快速幂原理:a^b,将b拆成二进制数相加的形式,从而使运算次数减少

Example:a^11=a^(2^0+2^1+2^3),时间复杂度为O(log11)。

 1 scanf("%d%d",&a,&b)
 2         int c=1,d=a;
 3         while(b!=0)
 4         {
 5         if(b&1!=0)//取b的二进制数的最后一位(相当于b%2!=0) 6             c*=d;   7             d*=d;  //每往右推一位,d倍增,2^0 2^1 2^2…… 8             b>>=1;//将b的二进制数往右推一位(相当于b/=2) 9         }  10 printf("%d\n",c);//c=a^b
时间: 2024-07-30 10:21:20

GDUFE-OJ 1203 快速幂的相关文章

Light OJ 1268 Unlucky Strings 矩阵快速幂+KMP

题目来源:Light OJ 1268 Unlucky Strings 题意:给你一些可以用的字符 然后求组成不包含给定字符串的方案数 思路:矩阵经典问题 从i走k步路到达j的方案数 可以用矩阵快速幂求解 对于求长度为n的字符的方案数 就是走n步路 求走法 可以用KMP求出走一步 从前i个字符到前j个字符的方案数 这点有点不好理解 想一想 #include <cstdio> #include <cstring> #include <algorithm> #include

hdu oj 1061 Rightmost Digit (快速幂算法)

这里首先要讲解一下快速幂算法: 快速幂取模算法 在网站上一直没有找到有关于快速幂算法的一个详细的描述和解释,这里,我给出快速幂算法的完整解释,用的是C语言,不同语言的读者只好换个位啦,毕竟读C的人较多~ 所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余).在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快.计算范围更大的算法,产生了快速幂取模算法.[有读者反映在讲快速幂部分时有点含糊,所以在这里对本文进行了修改,作了更详细的补充,争取让更多的读者一目

点头OJ 1033 . 骨牌覆盖 V2 ( 状态压缩 + 矩阵快速幂 )

做题感悟:先前做过一个类似的题,是俄罗斯的一道区域赛的题目,也是用的状态压缩 + 矩阵快速幂. 解题思路:状态压缩 + 矩阵快速幂 构造一个矩阵 B [ i ] [ j ] 代表状态 i ,与状态 j 是否合法,j 代表上一行的状态,如果合法为 1 ,否则为 0 ,这样如果再得到初始各种状态的方案数的矩阵 A ,A 只有一列 ,这样 B * A 就是第二行各种状态对应 的方案数 .这样再加上矩阵快速幂就解决了. 代码: #include<iostream> #include<sstrea

SHUOJ1857 Yaoge鸡排系列之九——好多鸡排!!!【矩阵快速幂】

转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://202.121.199.212/JudgeOnline/problem.php?id=1857 1857: Yaoge鸡排系列之九——好多鸡排!!! Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 98  Solved: 6 Description Yaoge买了n块鸡排,其中第n块鸡排的质量为M(n),同时

矩阵快速幂的一份小结

矩阵真是个好东西!虽然矩乘的复杂度有点难看... ... 这几天也做了不少矩阵题目,还是有几道好题目的.不过我打算从入门开始. 矩阵乘法:A[i][k]*B[k][j]=C[i][j];(A的第i行的每项依次乘以B的第j列的每项的和) 很显然这是一个n^3的算法,还是比较难看的. 代码就差不多是这样了. struct Matrix{int T[51][51];}; Matrix Mul(Matrix a,Matrix b,int I,int K,int J) { Matrix S=S0; for

第三次周赛题解【并查集 KMP DFS BFS 快速幂】

问题 A: 一道签到题 时间限制: 2 Sec  内存限制: 128 MB 提交: 63  解决: 28 [提交][状态][讨论版] 题目描述 我想说这是一道签到题,意思就是本次测试中最水的一道,不过我这样说你真的愿意相信我吗?哈哈,题目是这样的给你一下小数,然后请告诉我分别告诉我这个小数的循环节的循环次数.循环节以及循环节长度 输入 输入包括多组测试数据每组测试数据1行,包括一个小数,小数的长度不超过200,小数大于0小于100 输出 分别输出这个小数的循环节的长度.循环节以及循环次数,中间以

POJ 3735 Training little cats 矩阵快速幂应用

点击打开链接 Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9807   Accepted: 2344 Description Facer's pet cat just gave birth to a brood of little cats. Having considered the health of those lovely cats, Facer decides to

【快速幂+中等难度】Calculation 哈工大HITOJ2901

这些天好颓啊..都没有A题,只是各种等着填的坑..简直.. 这道题....其实是快速幂模板题..为了学习矩阵快速幂,顺手复习下快速幂... 哈工大的OJ其实还挺友好的.速度也快..赞一个.. 翻译 给你两个数A,B,要你求(1b + 2b + ... + ab) 这个式子mod a的结果.(b是奇数) 每行一组数据 (我以下的代码和解释都是用大写的A,B来代替原题小写a,b,代码中的小写a只是一个类似tmp的东西) 原题 http://acm.hit.edu.cn/hoj/problem/vie

基础快速幂运算

浅析快速幂 首先,举个例子(假设数据全为long long型). 例题:输入a,n, 求a的n次方(a > 0). 看到这个例题,肯定是思路滚滚来啊,不就是相当于n个a相乘吗?于是乎,就上代码了: #include<iostream> using namespace std; long long ans(long long &a, long long &n) { long long sum = 1; for (int i = 1; i <= n; i++) { su