pat 1078. Hashing (哈希表模拟)
来源:互联网 发布:php网址导航源码 编辑:程序博客网 时间:2024/06/05 14:08
本题中首先是要把M转化为大于等于N的最小素数M’
我用了筛法打素数表,我认为M<=10000不代表M‘也<=10000。比10000小的最大素数是9973,比10000大的最小素数是10007。
则筛法以2-103为宜(素数103^2>10007)而非2-97(素数97^2<9973)
打完表后就可以求得M’
然后再用二次探测法。注意二次探测法在不同的地方表述的细节有所不同,我在程序中是设(k+j^2)%M k<M 没有k-j^2
程序如下:
#include<stdio.h>const int MAX=10010;int p[MAX];int azu[MAX];int num[MAX];int array[27]={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,101,103};void prime(){int i,j;p[1]=1;for(i=0;i<27;i++)for(j=2;;j++)if(array[i]*j<MAX)p[array[i]*j]++;elsebreak;}int main(){prime();int m,n,x,i,y,j;scanf("%d %d",&m,&n); if(p[m]){while(p[m])m++;}for(i=0;i<n;i++){scanf("%d",&x);y=x%m;j=0;while(azu[y]){if(j>=m) break;j++;y=(x+j*j)%m;}if(!azu[y]){azu[y]++;num[i]=y;}else{num[i]=-1;}} for(i=0;i<n;i++){if(i)printf(" ");if(num[i]==-1)printf("-");elseprintf("%d",num[i]);} printf("\n");return 0;}
0 0
- pat 1078. Hashing (哈希表模拟)
- PAT 1078. Hashing (模拟)
- PAT 1078. Hashing (25)
- pat 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- PAT 1078. Hashing (25)
- 【PAT】1078. Hashing (25)
- 1078. Hashing (25) PAT
- pat 1078. Hashing (25)
- PAT-A 1078. Hashing
- PAT 1078. Hashing (25)
- PAT 1078. Hashing
- 【PAT】1078. Hashing
- PAT 1078.Hashing (25)
- connect layout QColorDialog::getColor QFontDialog::getFont
- 2014.11.5聪明的质检员
- 激活Maven profile的几种方式
- 修改IntelliJ IDEA生成注释时的author
- Android开发之Activity设置透明背景
- pat 1078. Hashing (哈希表模拟)
- Android 组件-----Activity保存状态
- 条件数学期望
- 2014.11.1题解(3)---杭电1037
- Cocos开发中性能优化工具介绍之使用Windows任务管理器
- PHP面向对象开发(四)
- 第十四章之Activity返回结果
- LeetCode Spiral Matrix II
- mysql 安装 mysql-5.1.73-linux-x86_64-glibc23