POJ2247数论

来源:互联网 发布:淘宝怎样看自己的淘龄 编辑:程序博客网 时间:2024/06/06 07:09

p = 2^a*3^b*5^c*7^d

求形如上式的第n小的数。

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.PriorityQueue;import java.util.Queue;import java.util.StringTokenizer;public class Main {public static void main(String[] args) {new Task().solve();}}class Task {InputReader in = new InputReader(System.in);PrintWriter out = new PrintWriter(System.out);class Node implements Comparable<Node> {long p;int w;Node(long p, int w) {this.p = p;this.w = w;}@Overridepublic int compareTo(Node o) {return (p < o.p) ? -1 : ((p == o.p) ? 0 : 1);}}final int N = 5848;long[] humble = new long[N + 8];String th(int n) {String s;if (n % 10 == 1 && n % 100 != 11)s = "st";else if (n % 10 == 2 && n % 100 != 12)s = "nd";else if (n % 10 == 3 && n % 100 != 13)s = "rd";elses = "th";return s;}void solve() {Queue<Node> q = new PriorityQueue<Node>();q.offer(new Node(1L, 7));int idx = 0;while (!q.isEmpty() && idx < N) {Node u = q.poll();humble[++idx] = u.p;switch (u.w) {case 7:q.add(new Node(u.p * 7, 7));case 5:q.add(new Node(u.p * 5, 5));case 3:q.add(new Node(u.p * 3, 3));case 2:q.add(new Node(u.p * 2, 2));}}q = null;int n;while ((n = in.nextInt()) > 0)out.println("The " + n + th(n) + " humble number is " + humble[n] + ".") ;out.flush();}}class InputReader {public BufferedReader reader;public StringTokenizer tokenizer;public InputReader(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = new StringTokenizer("");}private void eat(String s) {tokenizer = new StringTokenizer(s);}public String nextLine() {try {return reader.readLine();} catch (Exception e) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String s = nextLine();if (s == null)return false;eat(s);}return true;}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}




0 0
原创粉丝点击