poj 1730 java+数学方法

原创 2012年03月27日 16:01:30
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));
    	  }
      }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

D - 容斥poj1142【数学方法】

点击打开链接 Smith Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Subm...

Number Sequence poj1019(数学方法)

Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39182   Accepted:...

UVa 439/HDU 1372/POJ 2243/ZOJ 1091 Knight Moves(BFS&纯数学方法)

439 - Knight Moves Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinej...

用数学方法解决工程问题系列(四) 计算包围一组多边形的几何形状

现在要开始解决问题了。我们的输入是一组连续的矩形,如下图橘黄色所示:这些矩形表示的是这个小车的路线上需要连续锁定的区域。这些小框是怎么算出来的暂且不在这里讨论。如果有一只蚂蚁替我们沿着这组矩形框的边缘...

Josephus(约瑟夫)环问题的数学方法,使用递推公式。

Josephus(约瑟夫)环问题的数学方法,使用递推公式。

Math数学方法--常用

NumbertoFixed() 保留小数点.常用 Math.ceil() - - - - - - - - - - - - 向上取整. Math.floor() - - - - - - - - - ...

约瑟夫环的数学方法

无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们...

约瑟夫问题的数学方法

N个人围成一圈,顺序排号,从从第一个人开始报数,从1到3,凡报道3的退出圈子,问最后留下的第几号的那位?/*约瑟夫问题的数学方法无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程...

关于机器学习中的一些数学方法

版权声明: 本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com。如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任。 前言...

用数学方法解约瑟夫环

问题:将编号为0~(N–1)这N个人进行圆形排列,按顺时针从0开始报数,报到M–1的人退出圆形队列,剩下的人继续从0开始报数,不断重复。求最后出列者最初在圆形队列中的编号。下面首先列出0~(N–1)这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)