poj 1730 java+数学方法

import java.util.*;
import java.math.*;

public class Main
{
	  static int prime[]= new int[100000];
	  static boolean isprime[]=new boolean[1000001];
	  
	  public static void creatprime()
	  {
		  Arrays.fill(isprime, false);
		  int k=1;
		  prime[0]=2;
		  for(int i=4;i<1000001; i+=2)
			  isprime[i]= true;
		  for(int i=3;i<1000001; i+=2)
		  {
			  if(isprime[i]==false)
			  {
				  prime[k++] = i;
				  for(int j=i+i;j<1000001;j+=i)
					  isprime[j]=true;
			  }
		  }
	  }
	  
	  public static long gcd(long a,long b)
	  {
		  if(b==0)return a;
		  long r = b;
		  while(r!=0)
		  {
			  r = a%b;
			  a = b;
			  b = r;
		  }
		  return a;
		  
	  }
	  
	  public static long solve(long n)
	  {
		  long result = 0;
		  long m = n>0?n:-n;
		  boolean flag = n>0?false:true;
		  n = m;
		  for(long i=0;prime[(int)i]<=(long)Math.sqrt(m*1.0)+1;i++)
		  {
			  long k = 0;
			  if(n%prime[(int)i]==0)
			  {
				  while(n%prime[(int)i]==0)
				  {
					  n/=prime[(int)i];
					  k++;
				  }
				  if(result==0)result =k;
				  else result = Main.gcd(result, k);
			  }
		  }
		  if(n!=1||result==0) result = 1;
		  if(!flag)return result;
		  while(result%2==0)result/=2;
		  return result;
		  
	  }
	  
      public static void main(String[]args)
      {
    	  Scanner in = new Scanner(System.in);
    	  
    	  Main.creatprime();
    	  
    	  while(in.hasNext())
    	  {
    		  long n = in.nextLong();
    		  if(n==0)break;
    		  System.out.println(Main.solve(n));
    	  }
      }
}

阅读更多
文章标签: java import string class
个人分类: ACM
上一篇不要62 //java字符串功能强大呀
下一篇poj 1730 map 水过
想对作者说点什么? 我来说一句

华为公司招聘+java+面试题

2008年09月13日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭