USACO-Superprime Rib
来源:互联网 发布:网络教育英语b统考 编辑:程序博客网 时间:2024/05/16 15:25
http://ace.delos.com/usacoprob2?a=0ypAbo0pjhC&S=sprime
我的想法很简单,就是先生成一位数的素数,在这基础上生成二位,然后再生成三位四位。。。
有一个很简单但是很实用的优化,注意到,素数的各位必定是1,3,7,9,当然一位的素数2,3,5,7,另当别论。
这样,我们只需在前一位的基础上添上1,3,7,9,然后逐个判断是否为素数。很简单,但是效率很高。
百度上有人用DFS,不过生成方法基本类似。有人先求出所有素数再拆开来判断,都可以。nocow上展示的一个用DP写的程序,真是大神了。。。
#include <iostream>#include <cstdio>#include <math.h>using namespace std;int n;int f[10][10000]={0};const int d[4]={1,3,7,9};bool check(int x) //判断x是否为素数{ int xx=int(sqrt(x)); for (int i=2;i<=xx;i++) if (x%i==0) return 0; return true;}int main(){ freopen("sprime.in","r",stdin); freopen("sprime.out","w",stdout); cin>>n; f[1][0]=4; f[1][1]=2; f[1][2]=3; f[1][3]=5; f[1][4]=7; int temp; for (int i=2;i<=n;i++) for (int j=1;j<=f[i-1][0];j++) for (int k=0;k<4;k++) { temp=f[i-1][j]*10+d[k]; if (check(temp)) f[i][++f[i][0]]=temp; } for (int i=1;i<=f[n][0];i++) cout<<f[n][i]<<endl; return 0;}
我发现USACO的first time好像这么容易拿的呢?
- Superprime Rib(usaco)
- USACO SuperPrime Rib
- USACO:Superprime Rib
- USACO-Superprime Rib
- USACO Superprime Rib
- USACO: Superprime Rib
- USACO 1.5 Superprime Rib
- USACO Superprime Rib
- USACO--1.5Superprime Rib
- USACO Superprime Rib(dfs)
- USACO 1.5-Superprime Rib
- usaco Superprime Rib
- usaco Superprime Rib
- USACO Prime Palindrome, SuperPrime Rib
- [USACO 1.5.3] Superprime Rib
- USACO 1.5 SuperPrime Rib (sprime)
- USACO Section 1.5 Superprime Rib
- USACO Section 1.5 Superprime Rib
- USACO-Arithmetic Progressions
- USACO-Mother's Milk
- USACO-Number Triangles
- USACO-Prime Palindromes
- html文本域字数限制
- USACO-Superprime Rib
- USACO-Checker Challenge
- USACO-The Castle
- USACO-Ordered Fractions
- USACO-Sorting a Three-Valued Sequence
- USACO-Healthy Holsteins
- USACO-Hamming Codes
- USACO-Preface Numbering
- 一个递归下降的数字表达式解析器