zoukankan      html  css  js  c++  java
  • 快速幂

    我觉得这个东西还是比较简单的,为什么考试的时候没有打出来我也不知道,再次奠基一下我那凉掉的考试。
    这里是一个简单的快速幂算法,求2的n次方的。

    这里在放一道例题:
    P1226 取余运算||快速幂

    下面是源代码:

    #include<cstdio>
    using namespace std;
    int n;
    long long  search(int n)
    {
    	//if(n==0) return 1;
    	if(n==1)
    	{
    		return 2;
    	}
    	else
    	{
    		if(n%2==0)
    		{
    			return search(n/2)*search(n/2);
    		}
    		else
    		{
    			return search(n/2)*search(n/2)*2;
    		}
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	printf("%d",search(n));
    	return 0;
    }
    

    上面这个是“证毕”的符号!
    长知识了吧!

    但是上面这个写法是不标准的,因为这样写search每次会被重新算一次,所以说要定义一个变量来存储,下一次search算的一个值,这样可以大大的节省时间!!!

    代码大致实现:(函数中那个部分,省略函数的头头和尾巴没有写!)

        if(n==0) retrun 1;
    	long long basic;
        basic=search(a,n/2,k);
        if(n%2) return basic*basic*a;
        else return basic*basic;
        
    

    2018.7.24

    其实用递归来实现快速幂是一件非常慢的事情,所以说真正的快速幂应该是使用递推来实现的,下面就放一个递推版的快速幂:

    LL fpow(LL x,LL k){LL v=1;
    	while(k){
    		if(k&1)v=v*x%p;
    		k>>=1,x=x*x%p;
    	}return v;
    }
    
  • 相关阅读:
    技术博客之Saju M
    Dajax 的安装以及详细使用
    当我感觉厌倦的时候
    2014年3月22日 星期日
    windows 7远程桌面访问 ubuntu12.04
    promise的用法
    for循环中匿名同步
    开启Group Work Site功能
    Jquery根据属性模糊查询节点
    设置用户字段
  • 原文地址:https://www.cnblogs.com/mudrobot/p/13330976.html
Copyright © 2011-2022 走看看