3044. 出现频率最高的质数
思路:枚举每一个点,然后再枚举八个方向,最后通过哈希表和判断质数的函数就可以记录所有质数的出现次数,找到符合要求的即可。
class Solution {
public:
int fx[10]={-1,-1,-1,0,0,1,1,1};
int fy[10]={-1,0,1,-1,1,-1,0,1};
bool check(int u){
bool flag=1;
for(int i=2;i<=u/i;i++){
if(u%i==0){
flag=0;
break;
}
}
return flag;
}
int mostFrequentPrime(vector<vector<int>>& mat) {
int n=mat.size(),m=mat[0].size();
unordered_map<int ,int>mp;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
for(int k=0;k<8;k++){
int x=i+fx[k],y=j+fy[k];
int t=mat[i][j];
while(x>=0&&x<n&&y>=0&&y<m){
t=t*10+mat[x][y];
if(check(t))mp[t]++;
x+=fx[k];
y+=fy[k];
}
}
}
}
int val=-1,cnt=0;
for(auto t:mp){
//cout<<t.first<<":"<<t.second<<endl;
if(t.second>cnt){
val=t.first;
cnt=t.second;
}else if(t.second==cnt){
val=max(val,t.first);
}
}
return val;
}
};