判断质数注意Msize为1的情况;
//
// main.cpp
// PATA1078
//
// Created by Phoenix on 2018/2/18.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cmath>
const int maxn = 10010;
int hashTable[maxn] = {0};
bool judge_prime(int x) {
if(x == 1) return false;
int flag = true;
for(int i = 2; i <= sqrt(x); i++) {
if(x % i == 0) flag = false;
}
if(flag) return true;
else return false;
}
int main(int argc, const char * argv[]) {
int m, n;
scanf("%d %d", &m, &n);
while(judge_prime(m) == false) m++;
for(int i = 0; i < n; i++) {
int a;
scanf("%d", &a);
int k = 1, b = a, l = m;
while(hashTable[a % m] != 0 && k <= l) {
a = k * k + b;
k++;
}
if(k == l + 1) printf("-");
else{
hashTable[a % m] = 1;
printf("%d", a % m);
}
if(i < n - 1) printf(" ");
else printf("\n");
}
return 0;
}
3月6日三刷代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
const int maxn = 10030;
int prime[maxn] = {false};
bool vis[maxn] = {false};
void findPrime() {
for(int i = 2; i < maxn; i++) {
bool flag = true;
for(int j = 2; j <= sqrt(i); j++) {
if(i % j == 0) flag = false;
}
if(flag == true) prime[i] = true;
}
}
int main() {
findPrime();
int size, n;
scanf("%d %d", &size, &n);
while(prime[size] == false) size++;
int table[size];
for(int i = 0; i < n; i++) {
int a;
scanf("%d", &a);
int j;
for(j = 0; j < size; j++) {
int pos = (a + j * j) % size;
if(vis[pos] == false) {
vis[pos] = true;
printf("%d", pos);
break;
}
}
if(j == size) printf("-");
if(i < n - 1) printf(" ");
else printf("\n");
}
return 0;
}