黑马程序员技术交流社区
标题:
问题如下
[打印本页]
作者:
我是三星
时间:
2015-9-13 23:17
标题:
问题如下
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class Prog2{
public static void main(String[] args){
int m = 1;
int n = 1000;
int count = 0;
//统计素数个数
for(int i=m;i<n;i++){
if(isPrime(i)){
count++;
System.out.print(i+" ");
if(count%10==0){
System.out.println();
}
}
}
System.out.println();
System.out.println("在"+m+"和"+n+"之间共有"+count+"个素数");
}
//判断素数
private static boolean isPrime(int n){
boolean flag = true;
if(n==1)
flag = false;
else{
for(int i=2;i<=Math.sqrt(n);i++){
if((n%i)==0 || n==1){ \\此处如果换成if(n%==0)输出结果与原来一致,想问一下 || n==1 在这里的作用?
flag = false;
break;
}
else
flag = true;
}
}
return flag;
}
}
作者:
夸克
时间:
2015-9-13 23:17
你把代码格式写清楚点读起来就会清楚了,那里不需要n==1,
if(n==1)
{
flag=false;
}
else
{
//这里边怎么可能n==1,这不就是if..else语句块么
}
作者:
菊花爆满山
时间:
2015-9-14 00:11
我认为没有作用 多余 如果n为1不会判断到这一步
作者:
刘凯1213
时间:
2015-9-14 09:27
此处 n==1 没有任何用,因为上面在 if 中已经判断了 n==1,如果 n=1了那么是不会到这个方法中的,所以再判断 n==1是无用的
作者:
技术小牛
时间:
2015-9-14 09:56
如果上面没有if(n==1)的判断 这儿是需要|| n==1的,因为1既不是素数也不是合数。所以是需要判断的,但是你前面已经判断了。所以下面就不用再判断了。希望您能采纳,临近考试我的黑马币还很少。十分需要啊
作者:
倦鸟识山
时间:
2015-9-14 09:56
上面判断过一次 所以没有用
作者:
kime
时间:
2015-9-14 11:37
n==1没有作用
作者:
a334
时间:
2015-9-14 20:10
理论上讲,那个位置 n已经是不等于1了~~因为上面判断 n==1 不成立 然后跳到else语句里去了
作者:
15173139267
时间:
2015-9-14 22:36
/**为什么你要这样玩。需求分析是从课本上面弄下来的,还是老师固定成这样的需求分析。 我看你代码的时候一开始都没有看懂。
*/
/**
n==1 当然是没有用的,前面已经进行了判断.当n=1时,你程序设计就是已经开始跳到返回(return)这里来了。
*/
//程序分析:判断素数的方法,获取一个数值,然后将这个数值除以1和它本身之外的值。
public class Prog2{
public static void main(String[] args){
int count = 0;
//统计素数个数
for(int i=1;i<1000;i++){
if(isPrime(i)){
count++;
System.out.print(i+" ");
if(count%10==0){
System.out.println();
}
}
}
System.out.println("在1和1000之间共有"+count+"个素数");
}
//判断素数
private static boolean isPrime(int n){
boolean flag = false;
if(n>1){
for(int i=1;i<n;i++){
if(i!=1){
if(n%i == 0){
flag = false;
break;
}else if(n == ++i){
flag = true;
}
}
}
}
return flag;
}
}
作者:
heshiwei
时间:
2015-9-15 10:45
n==1的意思就是:当传入的参数为1时,直接判定这是素数。
作者:
fengchaohui
时间:
2015-9-16 23:40
就是可以的啊 你注释符号错了 第二十六行
作者:
fengchaohui
时间:
2015-9-16 23:42
fengchaohui 发表于 2015-9-16 23:40
就是可以的啊 你注释符号错了 第二十六行
还有n==1没用啊
作者:
霹雳三口组
时间:
2015-9-21 23:14
代码有点长
作者:
charryxiaocai
时间:
2015-9-22 20:39
在这里没有用
自己做了一下上面的题目
int m = 0;
for (int i = 101; i < 201; i++) {
for (int j = 2; j < i/2+1; j++) {
if((i%j == 0)){
break;
}
if(j == (i/2)) m++;
}
}
System.out.println("一共:" + m + " 个素数");
作者:
fcl13761179064
时间:
2015-9-25 19:03
如果上面没有if(n==1)的判断 这儿是需要|| n==1的,因为1既不是素数也不是合数。所以是需要判断的,但是你前面已经判断了。所以下面就不用再判断了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2