完全数

[my0163] 完全数@HOBO浩

描述

求正整数 2 和 n 之间的完全数(一行一个数)。

完全数:因子之和等于它本身的自然数,如 6 = 1 + 2 + 3

输入

输入n(1 ≤ n ≤ 5000)。

输出

一行一个数,按由小到大的顺序。

输入样例

7

输出样例

6

提示

        完全数(Perfect number),又称完美数完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

        如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496。

中文名        完全数

外文名        Perfect number

(1)利用VB编程求10000以内完全数。

Dim a as Integer,b as Integer,c as Integer

For a = 1 To 10000

c = 0

For b = 1 To a \ 2

If a Mod b = 0 Then c = c + b

Next b

If a = c Then Print Str(a)

Next a

(2)利用C语言编程求1000以内完全数。

#include<stdio.h>

int main()

{

int i, j, s, n; /*变量i控制选定数范围,j控制除数范围,s记录累加因子之和*/

printf("请输入所选范围上限:");

scanf("%d", &n); /* n的值由键盘输入*/

for( i=2; i<=n; i++ )

{

s=0; /*保证每次循环时s的初值为0*/

for( j=1; j<i; j++ )

{

if(i%j == 0) /*判断j是否为i的因子*/

s += j;

}

if(s == i) /*判断因子这和是否和原数相等*/

printf("It's a perfect number:%d\n", i);

}

return 0;

}

(3)利用java语言编程求1000以内完全数。

public class test46 {

 public static void main(String args[]) {

  int sum = 0;

  int i = 2,j = 1;

  for(i = 2; i <= 10000; i++)

  {

   for(j = 1; j < i; j++)

   {

    if(i%j == 0)

     sum = sum+j;

   }

   if(sum == i)

    System.out.println(" " + sum);

   sum = 0;

  }

 }

}

(4)利用JavaScript语言编程求N以内完全数。

function perfectNumber(N){

var nums = [], sum, i, j;

//0除以任意数都是0,所以从1开始

for (i = 0; i <= N; i++){

sum = 0

//完全数除以自己一半,求余肯定会大于0,所以用i/2

for(j = 1; j <= i/2; j++){

if (i % j === 0){

sum += j;

}

}

if (sum === i){

nums.push(i);

}

}

return nums;

}

我们已经发现的完全数有

6

28

496

8,128

33,550,336

8,589,869,056

137,438,691,328

2,305,843,008,139,952,128

2,658,455,991,569,831,744,654,692,615,953,842,176

代码:

#include <bits/stdc++.h>

using namespace std;

bool isPrime(int i) {
	if (i <= 1) {
		return false;
	}
	for (int j = 2; j <=sqrt(i); j++) {
		if (i % j == 0) {
			return false;
		}
	}
	return true;
}

int main() {

	int x,y;
	cin >> x >> y;
	for (int i = x; i <= y; i++) {
	//等同于if(isPrime(i) == true)
		if (isPrime(i)) {
			cout << i << endl;
		}
	}

	return 0;
}

[my0157]

输入一个正整数 n,输出 1~n 所有的素数。

#include <bits/stdc++.h>

using namespace std;
bool isPrime(int i){
	bool f=true;
	if(i<=1){
		f=false;
	}
	for(int j=2;j<i;j++){
		if(i%j==0){
			f=false;
			break;
		}
	}		
	return f;
}
int main() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
	if(isPrime(i)){
		cout<<i<<endl;
	}
}
	return 0;
}

 用false 或者 true 

#include <bits/stdc++.h>

using namespace std;

bool isPrime(int i) {
	if (i <= 1) {
		return false;
	}
	for (int j = 2; j <=sqrt(i); j++) {
		if (i % j == 0) {
			return false;
		}
	}
	return true;
}

int main() {

	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
	//等同于if(isPrime(i) == true)
		if (isPrime(i)) {
			cout << i << endl;
		}
	}

	return 0;
}

素数:曾称质数。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。如2,3,5,7,11,13,17…。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值