<stdio.h>
<set>
<stdlib.h>
void setMap(int ,int );
void search(int id);
std::set<int> map[1002];//グラフのつながりを表す
bool moveOK[1002];
int main()
{
int v,d;
while(scanf("%d",&v)!=EOF){
scanf("%d",&d);
setMap(v,d);
}
}
void setMap(int v,int d){
int fibo[1002];
fibo[0]=1;
fibo[1]=2;
for(int i=0;i<1002;i++){
moveOK[i]=true;
map[i].clear();
}
for(int i=2;i<=v;i++) fibo[i]=(fibo[i-1]+fibo[i-2])%1001;
for(int i=1;i<=v;i++){
for(int j=1;j<=v;j++){
if(i==j) continue;
if(abs(fibo[i]-fibo[j])<d){
map[fibo[i]].insert(fibo[j]);
map[fibo[j]].insert(fibo[i]);
}
}
}
int count=0;
for(int i=1;i<=v;i++){
if(moveOK[fibo[i]]==true){
count++;
search(fibo[i]);
}
}
printf("%d\n",count);
}
void search(int id){
moveOK[id]=false;
std::set<int>::iterator it;
it=map[id].begin();
while(it!=map[id].end()){
if(moveOK[*it]==true){
search(*it);
}
it++;
}
}
最終更新:2011年05月04日 10:48