基础实验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;
}
勤能补拙,熟能生巧
原文地址:https://www.cnblogs.com/snzhong/p/12430927.html