USACO 1.5 – Superprime Rib


superprimerib - codetrick
Butchering Farmer John's cows always yields the best prime rib. You can tell prime ribs by looking at the digits lovingly stamped across them, one by one, by FJ and the USDA. Farmer John ensures that a purchaser of his prime ribs gets really prime ribs because when sliced from the right, the numbers on the ribs continue to stay prime right down to the last rib, e.g.:
     7  3  3  1  
The set of ribs denoted by 7331 is prime; the three ribs 733 are prime; the two ribs 73 are prime, and, of course, the last rib, 7, is prime. The number 7331 is called a superprime of length 4.
Write a program that accepts a number N 1 <=N<=8 of ribs and prints all the superprimes of that length.
The number 1 (by itself) is not a prime number.

PROGRAM NAME: sprime

INPUT FORMAT

A single line with the number N.

SAMPLE INPUT (file sprime.in)

4  

OUTPUT FORMAT

The superprime ribs of length N, printed in ascending order one per line.

SAMPLE OUTPUT (file sprime.out)

2333  2339  2393  2399  2939  3119  3137  3733  3739  3793  3797  5939  7193  7331  7333  7393
http://mycodebattle.com/2014/09/usaco-1_5-superprime-rib/
首先有几个特殊的数字。
  1. 1 9不能作为第一位。
  2. 2只能作为第一位。
其余的数字都不行。
然后DFS即可。
const int num[] = {1, 2, 3, 5, 7, 9};
int str[10], n;
bool Check(int nm)
{
for (int i = 2; i <= (int)sqrt(nm + 0.5); i++)
if (nm % i == 0) return false;
return true;
}
void DFS(int curLen)
{
int i, j;
if (curLen == n)
{
int nm = 0;
for (i = 0; i < n; i++) nm = nm * 10 + str[i];
if (Check(nm)) printf("%d\n", nm);
return;
}
for (i = 0; i < 6; i++)
{
if (curLen == 0)
if (i == 0 || i == 5) continue;
if (curLen != 0 && i == 1) continue;
str[curLen] = num[i];
int nm = 0;
for (j = 0; j <= curLen; j++) nm = nm * 10 + str[j];
if (!Check(nm)) continue;
DFS(curLen + 1);
}
}

这题也是用递归。初始的数只可能为{2,3,5,7},递归时检查不是素数就退出,是的话for i = 0: 9 dfs(10*num+i)继续递归,如果位数到了N且是素数,则输出。 
https://github.com/leonlu/USACOJavaSolution/blob/master/USACOSection1/src/sprime.java

public class sprime { private static int N;
private static int[] init = new int[]{2,3,5,7};
private static BufferedReader in;
private static PrintWriter out;
public static void main(String[] args) throws Exception{
in = new BufferedReader(new FileReader("sprime.in"));
out = new PrintWriter(new BufferedWriter(new FileWriter("sprime.out")),true);
N = Integer.parseInt(in.readLine());
for(int i : init)
dfs(i);
System.exit(0);
}
private static void dfs(int n){
// if not prime return
if(n != 2 && n % 2 == 0) return;
for(int i = 3; i * i <=n; i+=2){
if(n % i == 0) return;
}
// if the length, then output
if(Integer.toString(n).length() == N)
out.println(n);
for(int i = 0; i <=9; i++)
dfs(10 * n + i);
}
}
http://greenmoon55.com/usaco-superprime-rib/
void search(long a,int depth)
{
    long temp;
    int i;

    if (depth==n)
    {
        printf("%ld\n",a);
        return;
    }
    for (i=1;i<10;i+=2)
    {
        temp=a*10+i;
        if (isprime(temp)) search(temp,depth+1);
    }
}
http://blog.csdn.net/finded/article/details/39452243
1.最高位(首位)只能是质数数字:2,3,5,7
2.其余低位(除了最高位)只能是1,3,7,9
3.n=1时,可以直接输出2,3,5 7
    然后,这个题的解法很多。这里,我是采用的深度搜索DFS-回溯法。搜索的边界条件十分重要,我做是感觉比较混乱。这就导致程序出错,写出来后又调试了很久。最后程序还是条理不清,可读性不强。
    DFS时有几个地方要特别注意:不同位的递归-最高位和其余位,每一位的递归-尝试该位所有可能的数,递归的深度-特殊质数的位数。编程的核心就在与如何把这些约束有机高效的组合在一起。
void dfs(int p,int n,int N){
    int i;
 for (i=0;i<4&&n<N;i++){ 
  p=p*10+num2[i];

  if (isprime(p)){
   n=n+1;
   if(n==N) printf("%d\n",p);
            else     dfs(p,n,N);

   n=n-1;p=p/10;
   continue;
  }
  else {
   p=p/10;
   continue;
  } 
 } 
}
Read full article from superprimerib - codetrick

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts