clipboard.png
这道题牵扯到了hash散列中的集中查询方式,随后做一个总结,对于素数方面,没有神马难度;

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
using std::vector;
const int maxn=10010;
bool vis[maxn]={false};

bool isPrime(int x){
    if(x<=1)
        return false;
    int sqr=sqrt(x*1.0);
    for(int i=2;i<=sqr;i++){
        if(x%i==0)
            return false;
    }
    return true;
}

int main(){
    vector<char> v;
    int m,n;
    int num;
    scanf("%d%d",&m,&n);
    while(!isPrime(m)){
        m++;
    }
    for(int i=0;i<n;i++){
        scanf("%d",&num);
        int M=num%m;
        if(!vis[M]){
            vis[M]=true;
            if(i==0)
                printf("%d",M);
            else
                printf(" %d",M);
        }else{
            int step;
            for(step=1;step<m;step++){
                M=(num+step*step)%m;
                if(!vis[M]){
                    vis[M]=true;
                    if(i==0)
                        printf("%d",M);
                    else
                        printf(" %d",M);
                    break;
                }
            }
            if(step>=m){
                if(i>0)
                    printf(" ");
                printf("-");
            }
        }
    }
    for(int i=0;i<v.size();i++){
        if(i==0)
            printf("%c",v[i]);
        else
            printf(" %c",v[i]);
    }
    system("pause");
    return 0;
}

宋霖轩
16 声望4 粉丝

克哈的霓虹都为我闪烁


« 上一篇
PAT A1015