14418: 找素数发表时间:2022-10-28 23:22 14418: 找素数 时间限制: 1 Sec 内存限制: 128 MB 题目描述 素数又称质数,是指一个大于 1 的正整数,如果除了 1 和它本身以外,不能再被其它的数整除, 例如:2、3、5、97 等都是素数。2 是最小的素数。
输入 输入共 2 行:
输出 输出共 1 行,1 个整数,为找到的最大素数。若无法拼出素数,输出-1。 样例输入 Copy 3 2 7 9 样例输出 Copy 97 提示 对于 30%的数据:n ≤ 3;
解析:比起判断质数,我认为这道题更复杂的地方在于搜索部分,因此把他划分在搜索算法这块。直接一个个数字从大到小一位一位搜索过来。如果是质数就输出答案。 由于本题数据量不大,不需要线性筛。
#include<bits/stdc++.h> using namespace std; long long now; int a[8],n; bool b[8]; bool t; long long ans=0; void dfs(int no){ if(no>n){ t=0; for(long long i=2;i*i<=now;i++) if(now%i==0){t=1;break;} if(now<=1) t=1; if(!t) ans=max(ans,now); return; } //if(!t) return; for(int i=n;i>=1;i--) // if(!t) return; if(!b[i]){ b[i]=1;now=now*10+a[i];dfs(no+1); now/=10;b[i]=0;//if(!t) return; } dfs(no+1); } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); t=1;sort(a+1,a+1+n);now=0; memset(b,0,sizeof(b)); dfs(1); if(ans==0) printf("-1\n"); else printf("%lld\n",ans); return 0; }
文章分类:
算法例题
|