一个超时的题,本是想用Java学调试的,写辛苦了,所以抄下来

原创 2012年03月23日 19:26:16
Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD) is 1. For instance, 1, 3, 5, 7, 9...are all relatively prime to 2006. 

Now your job is easy: for the given integer m, find the K-th element which is relatively prime to m when these elements are sorted in ascending order. 


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

public class Main
{
	static int prime[] = new int[1000];
	static boolean isprime[] = new boolean[1000];
	static long factor[] = new long[20];
	
	public static void creatprime()//产生素数表
	{
	      Arrays.fill(isprime, false);
	      for(int i=2;i<1000; i+= 2)
	    	  isprime[i] = true;
	      int k=1;
	      prime[0]=2;
	      for(int i=3;i<1000;i+=2)
	      {
	    	  if(!isprime[i])
	    	  {
	    		  prime[k++] = i;
	    		  for(int j=i+i;j<1000;j+=i)
	    			  isprime[j]= true;
	    	  }
	      }
	}
	
	public static boolean isPrime(long n)//判断是不是素数
	{
		for(int i= 0;prime[i]*prime[i]<=n;i++)
		{
			if(n%prime[i]==0) return false;
		}
		return true;
	}
	
	public static void factors(long n)//对一个数求它的因子,并存入factor数组
	{
		int k = 0;
		Arrays.fill(factor,0);
		for(int i=0;prime[i]<=n&&i<1000;i++)
		{
			if(n%prime[i]==0)
			{
				factor[k++] = prime[i];
				while(n%prime[i]==0) n/=prime[i];
			}
		}
		return ;
			
	}
	
	public static int howMany(long n)//使用队列模拟容斥原理,其实不知道正不正确
	{
		Queue<Long> G = new ArrayDeque<Long>();
		for(int i=0;i<factor.length&&factor[i]!=0;i++)
			G.add(factor[i]);
		int sum = 0;
		while(!G.isEmpty())
		{
			long k = G.poll();
			sum += n/k;
			for(int i=0;i<factor.length&&factor[i]!=0;i++)
			{    
				if(factor[i]>k)
				if(Math.abs(k)%factor[i]!=0)
				{
					long temp = k*(-factor[i]);
					if(n/Math.abs(temp)!=0) G.add(temp);
				}
			}
		}
		return sum;
		
	}
	
	public static boolean hasFactor(long n)//数n有factor里的因子吗?
	{
		for(int i=0;i<factor.length && factor[i]!=0;i++)
			if(n%factor[i]==0)return true;
		return false;
	}
	

	public static void main(String[]args)
	{
		Scanner in = new Scanner(System.in);
		long k,m;
		
		Main.creatprime();
		
		while(in.hasNext())
		{
			k = in.nextLong();
			m = in.nextLong();
			
			if(m==1) System.out.println("1");//1的特殊判断
			else if(Main.isPrime(k))///k如果是素数,用下面的判别
			{
				if(m<k)System.out.println(m);
				else
				{
					long n = 1;
					while(n*(k-1)<m) n++;
					n = (n-2)*k + m - (n-2)*(k-1)+1;
					System.out.println(n);
				}
			}
			else//否则
			{
				Main.factors(k);//找k的因子
				long en = Main.howMany(m);//在m前已经有多少与k互斥的数
				en = m-en;
				
				for(long i=m+1;;i++)//从m+1开始逐一数与k互素的数
				{
					if(!Main.hasFactor(i)) en++;
					if(en==m){System.out.println(i);break;}
				}
			}
			
		}
	}
}


SDUT 1232-猴子分桃(逆推)

猴子分桃 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 老猴子辛苦了一辈子,给那群小猴...
  • qq_16255321
  • qq_16255321
  • 2014年10月23日 20:53
  • 1191

C++ HOJ 猴子分桃

本文给出两种实现猴子分桃子的算法思想,并附上C++源码实现。
  • u013630349
  • u013630349
  • 2015年07月09日 18:58
  • 1622

学习是一件很辛苦的事,全世界都一样!

“学习是一件很辛苦的事,全世界都一样!高考复习更是一次披荆斩棘般的艰苦历练,全中国都一样!”  高三的同学们,当学习进入不了状态,当对复习产生了倦怠时怎么办?下面的这些文字,当你真坚持不下去了的...
  • jdsjlzx
  • jdsjlzx
  • 2016年05月17日 09:54
  • 1445

java常见的120道面试题第一季(每30题为一季,整理的好辛苦~~~)

哎,大晚上的看题,也是醉了,分享给大伙咯!!! 问答题1 /120 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 参考答案 Java虚拟机是一个可以执行Java字节码的虚拟机进...
  • Summer_YuXia
  • Summer_YuXia
  • 2016年11月25日 23:37
  • 1895

我本是学机械的,却爱上了电子!

我本是学机械的,却爱上了电子!        2008年暑假,买了《深入浅出AVR单片机》这本书,再兴冲冲的跑到电子市场买了元器件,然后跟着书边焊接制作实验板边自学单片机。5V稳压电源模块、单片机最小...
  • electrocrazy
  • electrocrazy
  • 2016年10月14日 15:43
  • 226

想用深度学习的方法检测一个零部件的不合格部位,如何下手? | 社区问答

这里是 AI 研习社,我们的社区已经正式推出了!欢迎大家来多多交流~mooc.ai/bbs(戳文末阅读原文直接进)社长为你推荐来自 AI 研习社问答社区的精华问答。如有你也有问题,欢迎进社区提问。 一...
  • Y0W1as5eg37urFdS
  • Y0W1as5eg37urFdS
  • 2017年12月22日 00:00
  • 91

写了一个HTML页面,想用手机打开怎么办?

写了个HTML页面,想用手机访问怎么办?有三种方式 一:xampp服务器(需要电脑一台,手机,xampp服务器)     具体实施步骤: 1.到官方下载xampp安装到电脑上 2.打开xampp,将写...
  • wanglufei_1992
  • wanglufei_1992
  • 2015年10月29日 14:10
  • 8123

你还在想用制作网站来创业?我和你分享一个程序员的网站外包创业之路。

你还在想用制作网站来创业?我和你分享一个程序员的网站外包创业之路。
  • jianghuihong2012
  • jianghuihong2012
  • 2014年02月24日 18:48
  • 987

java架构师之路part3_2(打包书籍,辛苦搜集)

  • 2015年12月06日 12:47
  • 45.47MB
  • 下载

java架构师之路part4_part5(打包书籍,辛苦搜集)

  • 2015年12月06日 11:58
  • 57.95MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个超时的题,本是想用Java学调试的,写辛苦了,所以抄下来
举报原因:
原因补充:

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