老师给了一条java复习题不会做,高分求救 帮我做这题啦,我明天就考了,这题肯定会考的.救命啊!!!设计方法boolean prime(int n),用来判断数n是否为素数,若为素数,返回true;若不是素数,返回false;若n<0,抛出ArgumentOutOfBound异常. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 boolean prime(int n){ if(n<0) throw new ArgumentOutOfBound(); boolean re = true; for(int i=2;i<=n/2;i++) { if(n%i==0){ re = false; break; } } return re;} //一个数n为素数,则在2-(根号n)之间,不存在任何一个非平凡因子class ArgumentOutOfBoundException extends Exception{ ArgumentOutOfBoundException() { System.out.println("ArgumentOutOfBound!"); }}class Sieve{ static boolean prime(int n) throws ArgumentOutOfBoundException { boolean b=true; if(n<0) { throw new ArgumentOutOfBoundException(); } if(n>0) { for(int i=2;i<=Math.sqrt(n);i++) { if((n%i)==0) { b=false; break; } } } return b; } public static void main(String[] args) { try { System.out.print("Please input a number as your wish:"); int number=System.in.read(); boolean bl=prime(number); System.out.println(bl); } catch (Exception e) { e.printStackTrace(); } }} 问一下,要是循环到(int)Math.sqrt(n),效率会高吗? 到Math.sqrt不一定效率就高做开方的运算很慢的 boolean isPrimeNumber(int n) { if (n < 0) {throw new ArgumentOutOfBound()}if (n < 3) {return false;}int boundary = (int)Math.sqrt(n);for (int i = 2; i <= boundary; i++) {if ((n % i) == 0) {return false;}}return true;} private static boolean isPrimeNumber(int n) { if (n <= 0) { throw new ArgumentOutOfBound(); } else if (n == 1) { return false; } else if (n == 2) { return true; } else { int m = (int)Math.sqrt(n); for (int i = 3; i <= m; i += 2) { if ((n % i) == 0) { return false; } } } return true;}顺便评论一下:liujun999999 的方法最耗时Inhibitory 的方法,如果为2时就错了。 to: ls的ls没有搞错吧,2是最小的素数,而且是唯一偶素数。to: ls再次说明一下,1不是素数,2才是素数。 csdn的同仁们,既然楼主已经到这里来求助了,各位就拉他一把吧.呵呵 初学者实现为JTabbedPane添加关闭按钮 使用serv-u工具的问题 [求助]我想在这个位置实现关闭窗体,怎么写? 请教 容器问题(Iterator接口) 新手超级简单问题,白送分 菜的问题! 这个JAVA程序有问题吗?请高手看看 如何将tomcat 添加到win2000 的服务中。 有一个类,里面有一个字符串变量,这个变量要在程序运行时才能确定,有另一个类,想在前一个类实例化后访问它的字符串变量,怎样做? 如何把double类型值转换成字节 如何取得用户ID~(谢谢!急,在线等) java装好了怎么会这样
if(n<0)
throw new ArgumentOutOfBound();
boolean re = true;
for(int i=2;i<=n/2;i++)
{
if(n%i==0){
re = false;
break;
}
}
return re;}
class ArgumentOutOfBoundException extends Exception
{
ArgumentOutOfBoundException()
{
System.out.println("ArgumentOutOfBound!");
}
}
class Sieve
{
static boolean prime(int n) throws ArgumentOutOfBoundException
{
boolean b=true;
if(n<0)
{
throw new ArgumentOutOfBoundException();
}
if(n>0)
{
for(int i=2;i<=Math.sqrt(n);i++)
{
if((n%i)==0)
{
b=false;
break;
}
}
}
return b;
} public static void main(String[] args)
{
try
{
System.out.print("Please input a number as your wish:");
int number=System.in.read();
boolean bl=prime(number);
System.out.println(bl);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
做开方的运算很慢的
if (n < 0) {
throw new ArgumentOutOfBound()
}
if (n < 3) {
return false;
}int boundary = (int)Math.sqrt(n);
for (int i = 2; i <= boundary; i++) {
if ((n % i) == 0) {
return false;
}
}return true;
}
if (n <= 0) {
throw new ArgumentOutOfBound();
} else if (n == 1) {
return false;
} else if (n == 2) {
return true;
} else {
int m = (int)Math.sqrt(n);
for (int i = 3; i <= m; i += 2) {
if ((n % i) == 0) {
return false;
}
}
}
return true;
}顺便评论一下:liujun999999 的方法最耗时
Inhibitory 的方法,如果为2时就错了。
没有搞错吧,2是最小的素数,而且是唯一偶素数。to: ls
再次说明一下,1不是素数,2才是素数。