void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

求解fib(n)中,n的所有因子的个数,题目n<700,本来以为用大数做,

但是看了某个大牛的算法,就是牛,利用和求余的算法fib[i][j]表示fib(i)%j的值

直接上代码吧

#include <stdio.h>
#include
<math.h>
int fab[800][800];


int main()
{
int n,m,num,N;
for(int i=2;i<=700;i++)
{
fab[
0][i]=1;
fab[
1][i]=1;
for(int j=2;j<=700;j++)
fab[j][i]
=(fab[j-1][i]+fab[j-2][i])%i;

}
scanf(
"%d",&N);

while(N--){
num
=0;
scanf(
"%d",&n);
for(int i=2;i<=n;i++)
if(fab[n][i]==0)num++;
printf(
"%d\n",num);
}

return 0;
}
posted on 2011-04-17 15:09  void-man  阅读(242)  评论(0)    收藏  举报