探索アルゴリズム(Searching Algorithms )
線形探索(Linear Search)
/*
線形探索法による素数探索
*/
#include <stdio.h>
#define n 25
prime_n[n]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
void search(int key){
int i=0;
while(prime_n[i] <= key){
if(prime_n[i] == key){
printf("素数です。\n");
printf("探索回数=%d\n", i+1);
exit(0);
}
i++;
}
printf("素数ではありません。\n");
printf("探索回数=%d\n", i+1);
}
int main(void){
int i;
int key;
printf("100以下の自然数を入力してください。\n");
scanf("%d", &key);
search(key);
return 0;
}
二分探索(Binary Search)
/*
二分探索法による素数探索
*/
#include <stdio.h>
#define n 25
prime_n[n]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
void binary_search(int key){
int i=0;
int low, high, mid;
low=0;
high=n-1;
while(low <= high){
i=i+1;
mid = (low + high)/2;
if(prime_n[mid] == key){
printf(""素数です。\n");
printf("探索回数=%d\n", i+1);
exit(0);
}
else if(prime_n[mid] > key)
high = mid - 1;
else
low =mid + 1;
}
printf(""素数ではありません。\n");
printf("探索回数=%d\n", i);
}
int main(void){
int i;
int key;
printf("100以下の自然数を入力してください。\n");
scanf("%d", &key);
binary_search(key);
return 0;
}
配列の添え字とkeyを一致させる
/*
keyと配列の添え字(subscript)を一致させる
*/
#include <stdio.h>
#define n 101
prime_n[n]={0,0,2, 3,0, 5,0, 7,0,0,0, 11,0, 13,0,0,0, 17,0, 19,
0,0,0, 23,0,0,0,0,0, 29,0, 31,0,0,0,0,0, 37,0,0,
0, 41,0, 43,0,0,0, 47,0,0,0,0,0, 53,0,0,0,0,0, 59,
0, 61,0,0,0,0,0, 67,0,0,0, 71,0, 73,0,0,0,0,0, 79,
0,0,0, 83,0,0,0,0,0, 89,0,0,0,0,0,0,0, 97,0,0,0};
void search(int key){
if(prime_n[key] == 0)
printf("素数ではありません。\n");
else
printf("素数です。\n");
}
int main(void){
int key;
printf("100以下の自然数を入力してください。\n");
scanf("%d", &key);
search(key);
return 0;
}
ハッシュ法
/*
ハッシュ法
*/
#include <stdio.h>
#define n 49
prime_n[n]={0,0,2, 3, 53, 5,0, 7,0,0, 59, 11, 61, 13,0,0,0, 17, 67,
19, 0,0, 71, 23, 73,0,0,0,0, 29, 79, 31,0,0, 83,0,0,
37,0,0, 89, 41,0, 43,0,0,0, 47, 97};
void search(int key){
int h;
h = key%49;
if(prime_n[h] == key)
printf("素数です。\n");
else
printf("素数ではありません。\n");
}
int main(void){
int key;
printf("100以下の自然数を入力してください。\n");
scanf("%d", &key);
search(key);
return 0;
}