关闭

poj 1730 java+数学方法

186人阅读 评论(0) 收藏 举报
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));
    	  }
      }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:100637次
    • 积分:2628
    • 等级:
    • 排名:第13929名
    • 原创:172篇
    • 转载:3篇
    • 译文:1篇
    • 评论:5条
    最新评论