黑马程序员技术交流社区
标题:
求完数
[打印本页]
作者:
涵风
时间:
2014-1-9 18:27
标题:
求完数
编程实现 求1-1000内所有的完数(一个数如果恰好等于它的因子之和,这个数就称为“完数”。如6就是1个完数: 6=1+2+3,因子数就是所有可以整除这个数的数,但是不包括这个数自身.比如15的因子数是 1 3 5)
作者:
右哼哼
时间:
2014-1-9 18:57
public static void main(String[]args){
int sum = 0;
for(int i = 0;i<=1000;i++){
sum = 0;
int arr[] = new int[i];
for(int j = 1;j < i;j++){
if(i%j == 0){
int k = 0;
arr[k] = j;
sum += arr[k];
k++;
}
}if(i == sum){
System.out.print(i+" ");
作者:
V_John
时间:
2014-1-9 19:15
本帖最后由 V_John 于 2014-1-9 19:17 编辑
for (int i = 1; i <= 1000; i++)
{
List<int> list = new List<int>();//集合用来存储因子
for (int j = 1; j < i; j++)//对每个数字取因子
{
if (i%j==0)
{
//j是i的一个因子
list.Add(j);
}
}
//取出因子之后就开始判断完数
int sum = 0;//因子之和暂时为0
for (int k = 0; k < list.Count; k++)
{
sum += list[k];
}
if (sum == i)
{
//如果因子之和等于这个数字,那么就是因子
Console.Write(i+" ");
}
list.Clear();
}
Console.ReadKey();
}
复制代码
作者:
yuanlianxi03
时间:
2014-1-9 20:35
本帖最后由 yuanlianxi03 于 2014-1-10 12:11 编辑
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 1000; i++) //
{
int sum = 1; //初始化sum为1,因为1是任何整数的因子,直接将sum赋值为1,免去判断1为因子。
for (int j = 2; j <= Math.Sqrt(i); j++) //从2开始寻找每个数的因子 ,一直到等于开方数
{
if (i % j == 0) //如果一个数对另一个数求模得0,则其为本数的因子
{
sum += j; //加上第一个因子
if((i / j) != j)
sum += i / j;//加上与第一个因子对应的另一个因子
}
}
if (sum == i)
{
Console.Write("{0,9}", sum);
}
}
Console.ReadKey();
}
}
复制代码
作者:
念~
时间:
2014-1-10 09:31
yuanlianxi03 发表于 2014-1-9 20:35
少判断了一次开方数是不是他的整数因子
作者:
yuanlianxi03
时间:
2014-1-10 12:03
念~ 发表于 2014-1-10 09:31
少判断了一次开方数是不是他的整数因子
是是,谢谢提醒
作者:
红鹰(Jake)
时间:
2014-1-14 23:58
static void Main(string[] args)
{
int count = 0;
for (int i = 1; i < 1001; i++)
{
if (isWNum(i))
{
Console.Write(i + "\t");
count++;
}
if (count % 5 == 0)
{
Console.WriteLine();
}
}
Console.Read();
}
//判断是否是完数
static bool isWNum(int n)
{
int count = 0;
for (int i = 1; i < n; i++)
{
if (n % i == 0)
{
count += i;
}
}
if (count == n)
{
return true;
}
return false ;
}
作者:
十月April
时间:
2014-1-22 17:43
dingyixia,可以试意思写着看判断完数的条件,自己按照
作者:
未烧开的白开水
时间:
2014-2-11 14:25
自己手写了一个,有什么不足的地方,请多指教。
代码如下:
package com.test.arithmetic;
/**
* 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
* @author yanan.wang
* @version 1.0 11/02/2014
*
*/
public class PerfectNumber {
public static void main(String args[]) {
/**
* 求1-100内的完数
*/
for(int i = 0; i <= 100; i++) {
if(isPerfectNumber(i) != -1) {
System.out.print(i + " | ");
}
}
}
/**
* 判断一个数是否是完数
* 如果是返回自身,如果不是返回-1
* @param num
* @return
*/
public static int isPerfectNumber(int num) {
int total = 0;
for(int i = 1; i < num; i++) {
if(num % i == 0) {
total += i;
}
}
if(total != num) num = -1;
return num;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2