更高效率的A^B mod C
bird
#include <stdio.h>
#define LL unsigned long long int
inline LL mod(LL a,LL b)
{
while (a>=b)
a-=b;
return a;
}
//a*b mod c
inline LL MulAndMod(LL a, LL shl_b,LL c)
{
LL val,pre;
pre = mod(a,c);
val = 0;
while (shl_b)
{
if (shl_b&0x1)
val = mod(val + pre,c);
shl_b>>=1;
pre = mod(pre<<1,c);
}
return val;
}
inline LL A_BModC(LL a,LL shl_b,LL c)
{
LL val,pre;
if (shl_b&0x1) //根据2相应二进制位的值判断是否加A*2^n;\\因为有对b进行右移运算,所以每次只需判断最末位的结果就可以。
val = mod(a,c);
else
val = 1;
shl_b >>= 1; //计算 A*2^n的值。
pre = MulAndMod(a,a,c);
while (shl_b)
{
if (shl_b&0x1)
val = MulAndMod(val,pre,c);
shl_b>>=1;
pre = MulAndMod(pre,pre,c);
}
return val;
}
int main()
{
LL a,b,c;
while (scanf("%llu%llu%llu", &a,&b,&c)!=EOF)
printf("%llu\n", A_BModC(a,b,c));
return 0;
}
相关文档:
1、 int a=2,b=11,c=a+b++/a++; 则c值为多少?
【考点】编码规范。
表面上考察你对运算符优先级的掌握程度,但实际上优先级这些玩意很难死记硬背得住?大家的疑惑不就是运算符的结合顺序么?那么如何去避免呢?c=a+((b++)/(a++))不就行了么,其实问题背后考察的是你的编码规范,如何写清晰易懂的代码,如何在一个团 ......
1.首先是获得linux内核源码,好像是废话,下载地址如下:ftp://ftp.kernel.org/pub/linux/kernel/v2.6/下载:
linux-2.6.16.22.tar.bz2 patch-2.6.22.6.bz2
上面一步需要说明的是一般而言,linux内核的各个补丁文件是根据某个linux内核的版本号来作的patch。
将上面的两个压缩文件解压:
tar jxvf linux-2.6.22.ta ......
Ref : http://www.swig.org/translations/chinese/tutorial.html
假设你有一些c你想再加Python.。举例来说有这么一个文件example.c
/* File : example.c */
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
&nbs ......
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字创意产品网 .
它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
1。对于extern变量来说,仅仅是一个变量的声明,其并不是在定义分配内存空间。如果该变量定义多次,会有连接错误
2。通常,在模块的头文件中对本模块提供给其它模块 ......
static
C++中的static
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。
一、面向过程设计中的static
1、静态全局变量
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变 ......