如题。小弟面试的时候出的。不会。还请个人帮忙给解决一下。
解决方案 »
- 问大家一个关于java多线程锁机制的问题(附题目),请帮忙解答和分析
- struct1.1在哪里下载???找不到了!!!
- 如何将一个对象序列化成XML数据?
- Session可以传送数组吗?
- 被 classpath 和 package 搅昏了头 @_@
- 这里到底有没有高手呀,这样一个数组问题都没有人能解决??请真真的高手看看!!
- 关于Applet界面风格,请各位大哥帮忙!
- 对表TABLE操作的问题
- 我要在转到Red Hat下面作Java开发,我该如何安装Jdk和Jbuilder呢?
- GregorianCalendar为什么会是空的呢?
- swing 两个JFrame间如何传值?
- java调用VC写的dll函数,能强制返回么?
int total=0;
int max=2000;
for (int i = 1; i <= max; i += 2) {
int temp = (int) Math.sqrt(i);
boolean isPrime = true;
for (int j = 3; j <= temp; j += 2) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
total++;
System.out.println(i + " ");
}
}
}
素数都是单数,所以每次循环只看单数。
计算从3开始到根号i为止,是否有能整除i的。存在则不是素数,跳出循环,继续算下一个。如果不存在,那就是素数,打印出来。这个是最普通的算法,代码简单明了。肯定存在效率更高的算法,就是没那么简单了。
程序中,初值是有问题的,1和2两个有特别的数学定义,不是算法的问题。3开始的都是对的。改成下面那样:
public static void main(String[] args) { int max = 2;
suShu(max);
} private static void suShu(int max) {
if (max < 2) {
System.out.println("不存在小于等于" + max + "的素数");
} else {
System.out.println("小于等于" + max + "的素数有:");
System.out.println("2");
for (int i = 3; i <= max; i += 2) {
int temp = (int) Math.sqrt(i);
boolean isPrime = true;
for (int j = 3; j <= temp; j += 2) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) { System.out.println(i + " ");
}
}
}
}
一个数字n,如果不能被2~sqrt(n)中的任何一个数整除,那么n就是一个素数。
代码楼主应该不难实现吧。
for(int i=0;i<=N;i++) //N以内的素数
for(int j=2;j<=i-1;j++){
if(i%j==0)
break;
if(j==i-1)
System.out.println(i);
}
suShu(max);
} private static void suShu(int max) {
if (max < 2) {
System.out.println("不存在小于等于" + max + "的素数");
} else {
System.out.println("小于等于" + max + "的素数有:");
System.out.println("2");
for (int i = 3; i <= max; i += 2) {
int temp = (int) Math.sqrt(i);
boolean isPrime = true;
for (int j = 3; j <= temp; j += 2) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) { System.out.println(i + " ");
}
}
}
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
int n=100; /*表示n内的素数*/
Boolean[] prime=new Boolean[n+1];
long count=0; /* 计数器*/
/*prime数组初始化,偶数标志为true,奇数标志为false*/
for(int i=0;i<=n;i++)
if((i&1)!=0) prime[i]=true;
else prime[i]=false;
/*开始筛选*/
for(int i=3; i<=(int)Math.sqrt(n); i+=2 )
{ if(prime[i])
for(int j=i+i;j<=n;j+=i ) prime[j]=false;
}
/*输出结果*/
for(int i=0;i<=n;i++){
if(prime[i]){
System.out.print(i+" ");
count++;
}
}
System.out.println();
System.out.println("totally:"+count);
}
}