亲密数

题目:

如果整数A的全部因子(包括1,不包括A本身)之和等于B,并且整数B的全部因子(包括1,不包括B本身)之和等于A,,则称整数A和B为亲密数。求解3000以内的全部亲密数。

#include <stdio.h>
#include <string.h>

int factor_sum(int n) // 计算n的因子和
{
    int i;
    int sum = 0;
    for( i=1; i<n ; i++)
        if( n%i == 0 )
            sum += i;
    return sum;
}

int main(void)
{
    int fsum[3001], flag[3001]; // fsum[]数组用于存储1-3000各数字的因子和, flag[]用于标记1-3000各数字是否已经找到,避免同一对亲密数输出两次
    int i, peer;

    for( i=1; i<=3000; i++ )
        fsum[i] = factor_sum(i);

    bzero(flag,sizeof(int)*3001);
    for( i=1; i<=3000; i++)
    {
        peer = fsum[i];
        if( peer<=3000 && i!=peer && flag[peer]!=1 ) // 数字i的因子和为peer,若peer在3000以内,判断peer!=i,且尚未找到,即flag[peer]!=1
        {
            if(fsum[peer] == i)
                printf("(%d,%d)\n",i,peer);
            flag[i] = 1;
        }
    }

    return 0;
}

亲密数,布布扣,bubuko.com

时间: 2024-10-13 01:00:55

亲密数的相关文章

亲密数编程语言的定位

亲密数编程语言是试验性质的完全基于汉语的计算机编程语言.我只是闲时用她来探索一下汉语编程,学习一下相关知识,巩固一下个人技能,没有想着用它做严肃的事.我觉得也不该用汉语编程语言做严肃的事情,那些严肃的事情还是留给工业上成熟的语言来做吧.因为能力所限,我也不可能设计一个完美完善的编程语言如Ruby.Python.Go.C.Rust.Julia.Kotlin.Haskell.Clojure.Elixir等.我只能尽量减化.简化的结果就是亲密数编程语言和Forth语言比较相似,是基于栈的编程语言.大部

亲密数编程语言旋风式的介绍

为什么要学编程 你好世界 算数运算 操作和查看栈 获取帮助 数据类型 控制语句 重复 分支 循环 定义关键字 画图 坐标系 基本的画图命令 鳖图 结束语 为什么要学编程 这里我要引用一段文字. "人类学语言时,学的不仅是听还有说:学字时,学的不仅是读还有写:而现在随着我们向一个越来越数字化的世界迈进,我们也不仅应该学会如何使用程序,还要学会如何开发程序.在未来,面对着一个高度程序化的世界,如果你不能开发软件,那么你将变成软件.就是这么简单:要么编程,要么被编程(Program or Be Pro

5.20亲密数

Q:若整数A的全部因子(包括1,不包括本身)之和等于B,并且整数B的全部因子之和等于A,则称A与B是亲密数.求解3000以内的全部亲密数. 思路:先将1~3000以内所有数的全部因子之和算出来,存入到数组x[]中,这样x[i]中存放的是i的因子之和,寻找{1,2,--3000}范围中所有的亲密数的算法          如下: for(i=1;i<=3000;i++) //将1~3000所有数的因子和 放在一个数组x[1,2^3000]中 if(i没找到其亲密数,即i在集合B中) { for(j

亲密数对、递归求逆

/* * @Issue: 亲密数对问题:从键盘输入正整数 M 和 N(M<N),输出 M 和 N 之间所有的亲密数对. 亲密数对的定义如下:两个正整数 x 和 y,若 x 的所有因子之和(不包括 x 本身)等于 y, 并且 y 的所有因子之和(不包括 y 本身)等于 x,则 x 和 y 为亲密数对. * @Author: 一届书生 * @LastEditTime: 2020-02-21 10:04:41 */ #include<iostream> using namespace std;

算法15---数论2---亲密数

算法16---数论2---亲密数 如果整数a的因子和等于整数b,整数b的因子和等于整数a,因子包括1但不包括本身,且a不等于b,则称a和b为亲密数对. 1 /* 2 题目:亲密数 3 author taoliu——alex 2016.10 4 5 主要实现两种 6 1 判断两个数是不是亲密数. 7 2 找出一定范围内的亲密数. 8 9 */ 10 11 12 #include <stdio.h> 13 #include <stdlib.h> 14 15 int friendnum(

#【数学】【数论】几个特殊的数

素数 大于1且不被其他整数(除了1和其本身)整除的整数. 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 示例:2,3,5,7,11,13,17,19,23,29,31,37,39,41... 回文数 “回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等.在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number). 设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数

[转]100个经典C语言程序(益智类问题)

目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 1.7 分数四则运算 17.平分七筐鱼 18.有限5位数 19. 8 除不尽的数 21.4位反序数 22.求车速 23.阿姆斯特朗数 24.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+c

[转]100个经典C语言程序

本文转载自:http://blog.sina.com.cn/s/articlelist_1615065844_0_1.html 1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线*问题分析与算法设计如果在程序中使用数组,这个问题十分简单.但若规定不能使用数组,问题就变得不容易了. 关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行. 为了获得本文要求的图形就必须在一行

逆波兰

波兰(Poland)是个了不起的国家.元素周期表中的放射性元素钋(Po),是居里夫人发现的,是以她的祖国波兰命名的.在计算机科学中常用到的波兰表达式(Polish Notation).逆波兰表达式(Reverse Polish Notation)也是以波兰命名的.中国也是个了不起的国家,我知道的中国剩余定理(Chinese remainder theorem)是以中国冠名的.其他以中国冠名的物件有中国结.中国龙(Chinese Dragon).中国梦.中国模式.中国特色的社会主义等.嗯,今天不说