c语言计算一个数q的1次方到n次方的和,而q和n的数量级都是10的9次方,结果取模,怎么减少时间呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言计算一个数q的1次方到n次方的和,而q和n的数量级都是10的9次方,结果取模,怎么减少时间呢相关的知识,希望对你有一定的参考价值。

尽量减少运行时间!!

首先,将求和改为利用等比公式求和的公式来计算。其次,计算q的n+1次方时,使用快速幂的计算方法。为了防止溢出,每次乘积以后都先取模,再进行下一次的运算并取模。 参考技术A #include <stdio.h>
int main()

const int N = 1000007;
int q, n, res;
scanf("%d %d", &q, &n);
res = 0;
for (int i = 0; i < n; i++)
res = (q % N) * (1 + res) % N;
printf("%d\\n", res);
return 0;

2的n次方怎么编程

怎么改动下面程序来实现2的n此方的输出:
#include <stdio.h>
void main()
int i=0,n=0,fac=1;
printf("input n:")
scanf("%d",n);
for(i=1;i<=n;i++)

fac=fac*i;
printf("%d!=%d\n");
fac是阶乘

可以用C语言进行编程:

#include<stdio.h> 
#include<math.h> 
main() 
 
int n;  
long j; 
scanf("%d",&n); 
j=pow(2,n); 
printf("2^n=%d\\n",j); 
参考技术A 计算n次幂的时间复杂度只要logn就好了。楼上的方法太慢了,这样的话根本体现不出递归的优势

unsigned long pow(const int x,const int n)

if (1 == n)
return n;
unsigned long tmp = pow (x,n/2);
return n%2 ? tmp*tmp*x : tmp*tmp;


这个函数会计算x的n次幂!
参考技术B 上面的算法很强啊,今天学习了,不过有个地方估计你写错了
unsigned long pow(const int x,const int n)

if (1 == n)
return n; //return x;
unsigned long tmp = pow (x,n/2);
return n%2 ? tmp*tmp*x : tmp*tmp;
参考技术C #include<stdio.h>
double fac(int i)

if (i>0)
return -1;
if (1 == i||0 ==i)
return 1;
else return fac*fac(i-1);


/*然后调用!*/本回答被提问者和网友采纳
参考技术D #include <stdio.h>
void main()

int i=0,n=0,fac=1;
printf("input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)

fac*=2;


printf("%d!=%d\n",n,fac);

以上是关于c语言计算一个数q的1次方到n次方的和,而q和n的数量级都是10的9次方,结果取模,怎么减少时间呢的主要内容,如果未能解决你的问题,请参考以下文章

编程实现求2的零次方加2的一次方一直加到2的十次方的值

如何用C语言实现2的n次方

分治法求x的n次方的JAVA程序

输出2的1-100次方

用python程序求2的0次方到63次方

计算1!+2!+3!...+(n-1)!+n!。设计求解该问题的C语言程序,阶乘的计算使用递归函数实现