这个程序有多组输入,而这多组输入的运算都是相同的,所以可以利用数组f之前计算过的信毕搜息。
在你的code里做的修改,如果有疑问,欢迎交流
#include<stdio.h>int main()
{
int a,b,n,c
int pre_max_idx = 2
int f[100]
f[1]=1
f[2]=1
while(scanf("%d%d%d",&a,&b,&n)!=EOF)
{
if(n<=pre_max_idx){//如果之前计算过就直接返回
汪慎 printf("%d\n", f[n])
困数敬 continue
}
if(n<=0)
continue
for(c=n+1,n=pre_max_idx+1n!=cn++)//这里从pre_max_idx开始
f[n]=(a*f[n-1]+b*f[n-2])&7
pre_max_idx = n-1//修改当前的最大
printf("%d\n",f[n-1])
}
return 0
}
最主告搏要睁友液的措施就是改进算法,如控制循环次数;多使用中间结果,减少运算次数等。此外还可以从程序设计技术角度采取一些措施:如尽量减少值传递,多用引用来传递参数;减少减少除法运算;多用悉物局部变量等。
单独从代码上看旁嫌,没多少可改的,唯一可档启闹以增加效率的地方是for(k=2k<=sqrt(n)k++)
{
if(n%k==0)
{loop=1break}
}
在这里加一个break,避免多余的运算
不过看你这个程序的功能,似乎是求2000000以内的素数,如果是的话,行罩可以用素数筛
比这个快很多
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)