基础实验5-2.1 整型关键字的平方探测法散列 (25分)
#include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> typedef enum {false,true } bool; bool IsPrime(int n) { if(n==0||n==1) return false; if(n>2) { int i; for(i=2; i<=sqrt(n)+1; i++) { if(n%i==0)return false; } } return true; } int NextPrime(int n) { int i=n+1; while(1) { if(IsPrime(i)) return i; i++; } return i; } int main() { int m,n; scanf("%d %d",&m,&n); if(!IsPrime(m)) m=NextPrime(m); int H[m]; memset(H,0,sizeof(H)); int a[n]; int i,x; for(i=0; i<n; i++) { scanf("%d",&x); int key=x%m; int d,tmp=key; for(d=0; d<m; d++) { key=tmp+d*d; if(!H[key%m]) { H[key%m]=1; a[i]=key%m; break; } } if(d==m) { a[i]=-1; } } for(i=0; i<n; i++) { if(i) printf(" "); if(a[i]==-1) printf("-"); else printf("%d",a[i]); } return 0; }
勤能补拙,熟能生巧