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:...

有趣的分形图形-递归和数学方法解决-POJ 2083

Description A fractal is an object or quantity that displays self-similarity, in a somewhat technic...

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...

牛顿法以及雅克比矩阵、海森矩阵(Hessian)数学方法。

一般来说, 牛顿法主要应用在两个方面,          1, 求方程的根; 2, 最优化。 1,求方程的根 其原理便是使用泰勒展开,然后去线性部分,即:        ...

bzoj1257(数学方法)

首先,floor(n/d)的所有情况最多有2*sqrt(n)种,那么列出所有情况,在一定的区间内n/i是相同的(因为相同可以一起算),并且显然他们的余数以n/d为公差 作等差数列求和,再将所有不同的...

用数学方法解决工程问题系列(三) 判断任意给定一点是否在多边形内

项目里有这样一个需求,需要把一组矩形合并成一个多边形,这个多边形正好把所有矩形包在里面,而且是最小多边形。这里面尝试了好几种方案,不过每一种方案里都有这样一个步骤,判断给定的点在不在给定的矩形区域内。...

用数学方法解约瑟夫环

问题:将编号为0~(N–1)这N个人进行圆形排列,按顺时针从0开始报数,报到M–1的人退出圆形队列,剩下的人继续从0开始报数,不断重复。求最后出列者最初在圆形队列中的编号。下面首先列出0~(N–1)这...

UVa 3882 And Then There Was One(stl+有技巧的模拟||数学方法+约瑟夫问题)

Let’s play a stone removing game. Initially, n stones are arranged on a circle and numbered 1, …, n ...

百练-2746-OpenJudge(约瑟夫问题分析二,数学方法)

#include #include int main() {    int n, m, i,s;    while(scanf("%d%d",&n,&m)&&(n||m))    {  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1730 java+数学方法
举报原因:
原因补充:

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