有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。

/*
有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。例如:
9的约数和有:1+3=4
4的约数和有:1+2=3
所以9和4不是友好的。
220的约数和有:1  2  4  5  10  11  20  22  44  55  110=284
284的约数和有:1  2  4  71  142=220
所以220和284是友好的。
编写程序,判断两个数是否是友好数。
*/
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <malloc.h>
int func(int n){
    int i,sum;
    sum=0;
    for(i=1;i<=n/2;i++){
        if(n%i==0){
            sum+=i;
        }
    }
    return sum;
}
int main()
{
    int n,m,rs1,rs2;
    scanf("%d%d",&n,&m);
    rs1=func(n);
    rs2=func(m);
    if(rs1==m&&rs2==n){
        printf("%d is friendship with %d\n",n,m);
    }else{
        printf("%d is not friendship with %d\n",n,m);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhaohuan1996/p/11840289.html

时间: 2024-10-10 18:23:11

有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。的相关文章

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

1 /* 2 * 给定两个32位的整数N和M,以及表示比特位置的i和j.编写一个方法,将M插入到N中, 3 * 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011 4 * 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M 5 * 例如 6 * N=1000000000(1024) 7 * M=10011(19) 8 * i=2,j=6,输出10001001100 9 * 思路如下: 10 * 1.将N中的从

[算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)

问题描述: 设计一个类,包含如下两个成员函数: Save(int input) 插入一个整数到一个整数集合里. Test(int target) 检查是否存在两个数和为输入值.如果存在着两个数,则返回true,否则返回false 允许整数集合中存在相同值的元素 分析: 与[算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)不同,这里需要算出的是存不存在这两个数,可以在上一篇的基础上修改一下数据结构,HashMap其中key是数值,value是数值个数,然后需要作两步判断,map中存在数

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 来源:力扣(LeetCode)链接:https://leetcode-c

从一个整数数组中取出最大的整数,最小整数,总和,平均值

//从一个整数数组中取出最大的整数,最小整数,总和,平均值 //声明一个int类型的数组,并且随意的赋初值 int[] nums={1,2,3,4,5,6,7,8,9,0}; //声明两个变量用来存储最大值和最小值 int max=int.MinValue;//nums[0]; int min=int.MaxValue;//nums[0]; int sum=0; //循环的让数组中的每个元素跟我的最大值,最小值进行比较 for(int i=0;i<nums.Length;i++) { if(nu

获取不存在于某集合的大小至少为某整数的最小整数

题:获取大小至少为startNo,并且不存在于某个不确定是否有序的整数数组Array中的,最小整数. 如:不存在于2,6,8,11中的不小于3的最小整数为3. 如下测试代码,未发现实现不对... public static final String timeDifferenceFormats[] = { "天", "小时", "分钟", "秒" }; public static final String timeDiffere

一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数

4个字节表示的整数,总共只有2^32约等于4G个可能.为了简单起见,可以假设都是无符号整数.分配500MB内存,每一bit代表一个整数,刚好可以表示完4个字节的整数,初始值为0.基本思想每读入一个数,就把它对应的bit位置为1,处理完40G个数后,对500M的内存遍历,找出一个bit为0的位,输出对应的整数就是未出现的.算法流程:1)分配500MB内存buf,初始化为02)unsigned int x=0x1;  for each int j in file  buf=buf|x<<j;  e

pick定理:面积=内部整数点数+边上整数点数/2-1

1 //pick定理:面积=内部整数点数+边上整数点数/2-1 2 // POJ 2954 3 4 #include <iostream> 5 #include <cstdio> 6 #include <cstdlib> 7 #include <algorithm> 8 #include <vector> 9 #include <math.h> 10 using namespace std; 11 #define LL long lo

Objectvie-C 两个字节 转换成整数

1.整数到转换成4个字节 int length=1491449719; message[0] = length & 0xFF; message[1] = (length >> 8) & 0xFF; message[2] = (length >> 16) & 0xFF; message[3] = (length >> 24) & 0xFF; 2.四个字节转换成整数 int len = message[0] | (message[1] <

C语言两个特别大的整数类型相加超出范围使用两个技巧

技巧1:用long (%ld)或者long long(%lld)类型存取 技巧2:当两个同号的数字相加,放到等号的另一边,变成减号 问题: 给定区间[-2的31次方, 2的31次方]内的3个整数A.B和C,请判断A+B是否大于C 我的代码: 1 #include<stdio.h> 2 3 int main(){ 4 long array[10][3]; 5 int num,i,j; 6 scanf("%d",&num); 7 for(i=0;i<num;i++