c语言中pow()函数的用法和注意:
头文件:#include <math.h>
pow() 函数用来求 x 的 y 次幂(次方),其原型为:
double pow(double x, double y);
pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。
可能导致错误的情况:
如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。
如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。
如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。
如果返回值 ret 太大或者太小,将会导致 range error 错误。
错误代码:
如果发生 domain error 错误,那么全局变量 errno 将被设置为 EDOM;
如果发生 pole error 或 range error 错误,那么全局变量 errno 将被设置为 ERANGE。
写算法提高快速幂题目,突发奇想地想用pow()函数了。真是太天真了。pow函数返回的是double类型的,能表示的数的范围也就是15,6位。而快速幂那一题有些数据光输入的数就十几位了,根本没法保存!给了40分,着实的够意思了。
下面是快速幂那一题:
.
算法提高 快速幂
时间限制:1.0s 内存限制:256.0MB
问题描述
给定A, B, P,求(A^B) mod P。
输入格式
输入共一行。
第一行有三个数,N, M, P。
第一行有三个数,N, M, P。
输出格式
输出共一行,表示所求。
样例输入
2 5 3
样例输出
2
数据规模和约定
共10组数据
对100%的数据,A, B为long long范围内的非负整数,P为int内的非负整数。
对100%的数据,A, B为long long范围内的非负整数,P为int内的非负整数。
.
快速幂函数
#include<iostream>
using namespace std;
int Pw(long long a,long long b,int c) {
int ret = 1;
a = a % c;
while (b>0) {
if (b%2==1) {//当b是奇数的时候
ret = ret * a%c;
}
b /= 2;;
a = a * a%c;
}
return ret;
}
int main() {
long long int a, b;
int c;
cin >> a >> b >> c;
cout << Pw(a, b, c) << endl;
return 0;
}
快速幂相关博客: 点击打开链接
.