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次方,结果取模,怎么减少时间呢的主要内容,如果未能解决你的问题,请参考以下文章