ZOJ 1577 GCD & LCM 数论

来源:互联网 发布:cpu测试软件 linux 编辑:程序博客网 时间:2024/05/22 12:40

GCD & LCM

Time Limit: 2 Seconds      Memory Limit: 65536 KB

Given x and y (2 <= x <= 100,000, 2 <= y <= 1,000,000), you are to count the number of p and q such that:

1) p and q are positive integers;

2) GCD(p, q) = x;

3) LCM(p, q) = y.


Input

x and y, one line for each test.


Output

Number of pairs of p and q.


Sample Input

3 60


Sample Output

4



import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.HashMap;import java.util.Map;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) ;Map<Integer , Integer>  gao(int num){Map<Integer , Integer> facs = new HashMap<Integer, Integer>() ;for(int i = 2 ; i*i <= num ; i++){if(num % i == 0){int cnt = 0 ; while(num % i == 0){cnt++ ;num /= i ; }facs.put(i , cnt) ;}}if(num != 1)  facs.put(num , 1) ;return facs ;}long sum(Map<Integer , Integer> gcd , Map<Integer , Integer> lcm){long res = 1L ;int vis = 0 ;for(Map.Entry<Integer, Integer> entry : gcd.entrySet()){Integer fac = entry.getKey() ;Integer gcdcnt = entry.getValue() ;Integer lcmcnt = lcm.get(fac) ;if(lcmcnt == null || gcdcnt > lcmcnt) return 0L ;res *= (gcdcnt == lcmcnt) ? 1L : 2L ;vis++ ;}return res * (long)Math.pow(2.0 , lcm.size()-vis) ; }void solve(){while(in.hasNext()){out.println(sum(gao(in.nextInt()), gao(in.nextInt()))) ; //out.flush();  }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
原创粉丝点击