老师给了一条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的同仁们,既然楼主已经到这里来求助了,各位就拉他一把吧.呵呵 新手的不解 请问在生产者消费者中的一个统一编号的问题。 急问这功能解决方法!!! 为什么静态static方法中不可以new 内部类的对象?? 如何处理JNI中的字符串 谁能给我一个连接sql server的例子? 谢谢 我在sun公司下载了一个linux下的jdk。安装包的扩展名为.bin请问怎么安装? 在java 里,有没有判断字符串是否是数字的函数?(高分) 我对JAVA的语法结构不是很了解有什么什么好书讲这个的 wjmmml(笑着悲伤),请来领分,谢谢你的文档! 如何取得用户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才是素数。