码迷,mamicode.com
首页 > 其他好文 > 详细

约数与素数

时间:2016-10-03 06:47:55      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

好吧,今天一整天都是用循环求各种数,想破了我的小脑袋啊!

参考: 《Java语言程序设计(基础篇)》P—161

 

所谓素数,就是只能被1和它自身整除的数字。

约数,我想大家都应该知道公约数吧,那么,我们就先从简单的求一个数的最小因子/约数

开始 !

【demo是项目名称,Welcome是公共类名,和java文件的前缀名是一样的,首字母必须大写】

 1 package demo;
 2 
 3 public class Welcome {
 4     public static void main(String[] args) {
 5         int factor = 9;
 6         int divisor = 2;
 7 
 8         while (divisor < factor) {
 9             if (factor % divisor == 0)
10                 break;
11             divisor++;
12         }
13         System.out.println(factor + "除1之外的最小约数是: " + divisor);
14     }
15 }

break 是用来跳出while循环用的!

技术分享

-------------------------------------------------------------------------------------------------

 

接下来是稍微难一点的求两数的最大公约数

【公约数是指能同时被两个整数整除的数: 所以下面用到了&&,表示"和"的意思】

技术分享
 1 package demo;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Welcome {
 6     public static void main(String[] args) {
 7         Scanner input = new Scanner(System.in);
 8         
 9         System.out.print("输入两个整数: ");
10         int num1 = input.nextInt();
11         int num2 = input.nextInt();
12         int gcd = 2;
13         int divisor = 2;
14 
15         while (divisor <= num1 && divisor <= num2) {
16             if (num1 % divisor == 0 && num2 % divisor == 0) {
17                 gcd = divisor;
18             }
19             divisor++;
20         }
21         System.out.println(num1 + "和" + num2 + "的最大公约数是: " + gcd);
22     }
23 }
最大公约数

因为我们要求出的是最大的那个公约数,所以要让divisor(被除数, divisor++;)每次自增1, 直到大于

num1或num2为止。这样,最后一个可以被整除的数( gcd = divisor; )就是最大公约数啦!

技术分享

---------------------------------------------------------------------------------------------------

 

Q~Q Boss登场,该是求素数的时候啦! ! !

技术分享
 1 package demo;
 2 
 3 public class Welcome {
 4     public static void main(String[] args) {
 5         System.out.println("显示从2开始的前五十个素数: ");
 6 
 7         int count = 0;
 8         int num = 2;
 9 
10         while (count < 50) {
11             boolean isPrime = true;
12             for (int divisor = 2; divisor <= num / 2; divisor++) {
13                 if (num % divisor == 0) {
14                     isPrime = false;
15                     break;
16                 }
17             }    
18                 /** 这里的println表示打印完后自动换行, 由于我们每行要放十个素数,
19                                     所以在第十个数打印完后要换行, 因此在少于十个数时用先用print, 然
20                                     后在第十个数之后用println **/
21                 
22                 if (isPrime) {
23                     count++;
24                     if (count % 10 == 0) 
25                         System.out.println(num);
26                     else
27                         System.out.print(num + " ");
28                 }
29                 num++;
30         }
31     }
32 }
显示前五十个素数

【注意: 这里易错点是把boolean isPrime = true;放在循环前面。这样一旦遇到第一个非素数4,isPrime将永远是false】

只打印非素数4之前的两个素数......

技术分享

正确的结果: 

 技术分享

 

约数与素数

标签:

原文地址:http://www.cnblogs.com/Ruby517/p/5928395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!