完数和素数

这篇博客探讨了完数和素数的概念。对于完数,解释了如何通过找到因子并判断其和来确定一个数是否为完数,举例说明了6是一个完数。在素数部分,介绍了三种判断1-100之间素数的方法,包括检查所有约数的和、寻找i的约数个数以及假设i是素数并寻找反证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.完数

一个数如果恰好等于它的因子之和,这个数称为“完数”(因子:除去这个数本身的约数),例如6=1+2+3;

18 的因子:1,2,3,6,9

编程找出1000以内的所有完数

如何判断是否完数?

(1)先找出所有的因子,并且累加它的因子

(2)判断因子之和是否和原数相等,如果相等就是完数

package main;


public class Main {
	
	public static void main(String[] args) {
	//找出1000以内的完数
		for(int i=1; i< 1000;i++) {
			//找出所有的因子并且累加所有的因子
			int iSum = 0;
			for(int j =1; j<i; j++) {
				if(i%j==0) {
					iSum += j;
				}
			}
			if(i == iSum) {
				System.out.println(i);
			}
			
		}
		
		
	}

}

2.素数

找出1-100之间所有的素数

方法一:如何判断i是否是素数
(1)找出i的所有约数,并累加它们的和,例如:i = 5,它的约数是1和5,约数和是6;i=11,约数是1和11,和是12;i=18,约数是1,2,3,4,9,18,约数和39

(2)如果某个i 的约数和==i+1,那么i就是素数

方法二:如何判断i是否是素数

(1)找出i在[2,i-1]之间的约数个数
 (2)如果这个个数是0,那么i就是素数

方法三:如何判断i是否是素数

(1)假设i是素数
 boolean flag = true;//true 代表素数
 (2)找i不是素数的证据
  如果在[2,i-1]之间只要有一个数能够把i整除了,说明i就不是素数,修改flag = false;
 (3)判断这个flag

package main;


public class Main {
	
	public static void main(String[] args) {
	//找出1-100之间的所有素数
		//每一遍i的值都是不一样的,i=1,2,3,4,....
		//每一遍都要判断i是否是素数,如果是,就打印i
		//如何判断i是否是素数
		//(1)找出i的所有约数,并累加它们的和,例如:i = 5,它的约数是1和5,约数和是6;i=11,约数是1和11,和是12;i=18,约数是1,2,3,4,9,18,约数和39
		//(2)如果某个i 的约数和==i+1,那么i就是素数
		//方法一:
		for(int i = 1; i <= 100; i++) {
			
			int isum = 0;
			for(int j =1; j <= i; j++) {
				if(i%j==0) {
					isum +=j;
				}				
			}
			if(isum ==i+1) {
				System.out.println(i);
			}
		}
		System.out.println("---------------------------------");
		
		//方法二:
		//如何判断i是素数
		//(1)找出i在[2,i-1]之间的约数个数
		//(2)如果这个个数是0,那么i就是素数
		for(int i =2; i<= 100; i++) {
			
			int icount = 0;
			for(int j = 2; j<=i-1; j++) {
				if(i%j==0) {
					icount++;
				}
				
			}
			if(icount ==0) {
				System.out.println(i);
			}
			
		}
		
		
		System.out.println("---------------------------------------");
	//方法三:
		//(1)假设i是素数
		//boolean flag = true;//true 代表素数
		//(2)找i不是素数的证据
		//如果在[2,i-1]之间只要有一个数能够把i整除了,说明i就不是素数,修改flag = false;
		//(3)判断这个flag
		for(int i =2; i<=100;i++) {
			boolean flag = true;
			for(int j = 2; j< i;j++) {
				if(i%j ==0) {
					flag = false;
					break;
				}
			}
			if(flag) {
				System.out.println(i);
			}
		}
		
		
		
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值