1 #include <stdio.h> 2 int num[1000000+10]; 3 int main(){ 4 int l,m; 5 int i,j; 6 int sign; 7 num[0]=1; 8 num[1]=2; 9 while(~scanf("%d%d",&l,&m)){ 10 sign=1; 11 for(i=2;i<=l;++i){ 12 if(sign==1){ 13 num[i]=num[i-2]+num[i-1]+1; 14 }else if(sign==2){ 15 num[i]=num[i-2]+num[i-1]; 16 }else if(sign==3){ 17 if(num[i-2]+num[i-1]==0) 18 num[i]=m-1; 19 if(num[i-2]+num[i-1]!=0) 20 num[i]=num[i-2]+num[i-1]-1; 21 }else if(sign==0){ 22 num[i]=num[i-2]+num[i-1]; 23 } 24 num[i]=num[i]%m; 25 sign=sign+1; 26 sign=sign%4; 27 } 28 printf("%d ",num[l]%m); 29 } 30 return 0; 31 }
--------------------------------------------------------------------------
fmf ==> 101 ==> 5 fff ==> 111 ==> 7
--------------------------------------------------------------------------
cnt =0
from i <--1 to n
t <-- i
while( t != 0 )
if ( t mod 8==5 || t mod 8==7 ) { cnt ++; break; }
t=t/2
--------------------------------------------------------------------------
| |
| |
| |
list
i=0,cnt=1 i=1,cnt=2 i=2,cnt=4 i=3,cnt=6 i=4,cnt=9 i=5,cnt=15 i=6,cnt=25 i=7,cnt=40 i=8,cnt=64 i=9,cnt=104 i=10,cnt=169 i=11,cnt=273 i=12,cnt=441 i=13,cnt=714 i=14,cnt=1156 i=15,cnt=1870 i=16,cnt=3025 i=17,cnt=4895 i=18,cnt=7921 i=19,cnt=12816 i=20,cnt=20736 i=21,cnt=33552 i=22,cnt=54289 i=23,cnt=87841 i=24,cnt=142129 i=25,cnt=229970 i=26,cnt=372100 i=27,cnt=602070 i=28,cnt=974169 i=29,cnt=1576239 i=30,cnt=2550409