読者です 読者をやめる 読者になる 読者になる

フィボナッチ素数

フィボナッチ素数とは素数の中で\(F_{n+2}=F_{n+1}+F_{n}\)で定義される数列に含まれているような数のことです。

通常\(F_0=0,F_1=1\)としたもので考えます。



ああ、きたないコードだ。

#include <stdio.h>
#include <math.h>
#define N 50
#define STEP 10
#define REPEAT N/STEP
int prime(unsigned int x);
main()
{
	unsigned int fib[N]={0};
	int i,j,count[REPEAT]={0};
	fib[0]=0;
	fib[1]=1;
	for(i=0;i<N;i++){
		fib[i+2]=fib[i+1]+fib[i];
	}

	for(i=0;i<REPEAT;i++){
		for(j=i*STEP;j<(i+1)*STEP;j++){
			count[i]+=prime(fib[j]);
			if(prime(fib[j])){
				printf("fib[%d]=%u\n",j,fib[j]);
			}
		}
		printf("%d-%d of primes:%d\n",i*STEP,(i+1)*STEP-1,count[i]);
	}

    

}

int prime(unsigned int x){
	unsigned int l=(unsigned int)sqrt(x);
	unsigned int i;
	if (x==0||x==1){
		return 0;
	}
	for(i=2;i<=l;i++){
		if(x%i==0){
			return 0;
		}
	}
    return 1;
}

で、結果はこんな感じ。

fib[3]=2
fib[4]=3
fib[5]=5
fib[7]=13
0-9 of primes:4
fib[11]=89
fib[13]=233
fib[17]=1597
10-19 of primes:3
fib[23]=28657
fib[29]=514229
20-29 of primes:2
30-39 of primes:0
fib[43]=433494437
fib[47]=2971215073
40-49 of primes:2

\(F_0=0,F_1=1\)とした場合、素数であるようなフィボナッチ数の項番号も\(4\)を除いて素数になっているというのも面白いです。