黑马程序员技术交流社区
标题:
算出1——100之间素数的3种方法!
[打印本页]
作者:
王子墨
时间:
2015-10-3 15:49
标题:
算出1——100之间素数的3种方法!
刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的不要不要的。最后在基友的帮助下终于把思路理成功了!!!
第一种,用for循环嵌套for循环。(我就是敲这个代码把自己敲晕的,最后终于理解了,就又重新取演变了第二种和第三种)但是这种方法取不出2,不知道怎么把2给弄出来:
class sushu{
public static void main(String[] args) {
for (int a = 2;a <= 100;a++ ) { //因为1不是任何数,从2开始
for (int y = 2;y < a;y++ ) { //因为素数可以被自身整除,所以可以排除自身的数,所以y小于a,不用等于a
if (a % y == 0) { //a%y的值等于0,说明不是素数,就跳出循环。不等于0就不执行本句
break;
}
else if (a == y+1) { //判断a的值是否等于y加1,因为条件定义y永远小于a的值
System.out.println(a); //但是y的值循环到比a小1的话,y加上1刚好能相等
break;
}
else { //如果a%y既不等于0,也不相等,就继续判断,此处可写可不写
}
}
}
}
}
复制代码
第二种,for嵌套while。因为while循环结束后定义的值还能继续使用,而不像for结束后值就被释放了,所以用while可以这样写。
class sushu1{
public static void main(String[] args) {
for (int x = 2;x <= 100;x++ ) { //因为1不是任何数,从2开始
int y = 2;
while (x > y) { //如果x大于y 进入循环
if (x % y == 0) { //如果x%y等于0,则不是素数,则跳出循环。
break;
}
y++; //否则就是不等于0,y就自增1,然后继续循环
}
if (x == y) { //当循环结束就会判断x和y是否相等,相等就说明在循环语句里面一直%不尽,直到超出了判断。
System.out.println(x);
}
}
}
}
复制代码
第三种,就用一个while循环。本来是用do while实现的,但是发现直接用while代码一样,根本不用变。所以很疑惑do while到底和while有什么区别。
class sushu2 {
public static void main(String[] args) {
int x = 2,y = 2;
while (x <= 100) { //x最大到100就停止循环了,但是没有定义y最大值,所以看下面
if (x % y != 0) { //如果x%y不等于0,说明y没有磨够
y++; //y就自增1
continue; //然后continue结束本次循环,回到while处继续循环
}
else if (x == y) { //如果x被y磨够了,那么它们肯定是相等的,所以就输出
System.out.println(x);
}
x++; //然后x自增1.接着把y的值重新赋值到2
y = 2;
}
}
}
复制代码
思想一乱就好难敲代码了,所以给一起努力学习java的小黑们一个建议,就是每敲一行代码就在后面注释一下,然后自己一旦敲晕了,就看注释,会知道自己卡在哪里了,我一个人默默的算素数的时候就是没有注释,导致自己算了2天才弄懂,绕的自己差点连1+1等于几都得忘记了。
作者:
wwf707542865
时间:
2015-10-3 15:55
素数是什么数,我数学是体育老师教的
作者:
zhaopengfei
时间:
2015-10-3 16:10
一入java坑,从此节操是路人
作者:
斯文阿昊
时间:
2015-10-3 21:45
总结的真好
作者:
小转铃
时间:
2015-10-3 22:03
感谢楼主提供的思路,学习一下,手动点赞
作者:
哈哈我赢了
时间:
2015-10-3 23:12
学习一下。。。。。
作者:
yiranpanda
时间:
2015-10-4 00:06
有学习啦
作者:
outxf003
时间:
2015-10-4 11:05
路过,顶一个
作者:
meijunwei6275
时间:
2015-10-4 11:06
学习啦
作者:
阿萨德豆腐干
时间:
2015-10-4 11:39
看看
作者:
313098819
时间:
2015-10-4 17:18
不错,很好!
作者:
pengwei1989
时间:
2015-10-4 17:30
总结的不错,学习了。
作者:
becky_ny
时间:
2015-10-4 18:47
王子墨 发表于 2015-10-3 15:49
刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的 ...
太牛掰了
作者:
前进……
时间:
2015-10-4 18:47
这道题我都没敢做,看别人敲的代码都看不懂,还得多学习啊!
作者:
#→_→
时间:
2015-10-4 19:19
楼主,while是先判断再运行,do while是先运行一次再判断是否继续运行,区别还是有的
作者:
tianweidong
时间:
2015-10-4 19:43
学习中。。。。。。。。。。。
作者:
pan1564335
时间:
2015-10-4 19:45
while和do...while的区别就是后者最少执行一次,而前者不满足一次都不执行
作者:
狮子王
时间:
2015-10-4 19:51
- - 看了二楼我才懂了传说中的素数
作者:
asdsy222
时间:
2015-10-4 20:36
太厉害了,已经收藏
作者:
Meitan
时间:
2015-10-5 20:33
真厉害,我马上也要去基础班了,好忐忑啊
作者:
王子墨
时间:
2015-10-17 23:37
一晃眼一半课程过去了
作者:
Neverlandxu
时间:
2015-10-17 23:38
新人贴,赞一个,
作者:
往事如风555
时间:
2015-10-18 00:08
//程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),
//如果能被整除, 则表明此数不是素数,反之是素数。
public class ShuShu {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}
}
// 判断素数的方法,如果是素数,返回true。
private static boolean isPrime(int n) {
if (n >= 1 && n <= 3) {
return true;
} else {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
}
return true;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2