1105 判断友好数对

题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1105
Description
输入两个正整数m和n,顺序输出m到n之间的所有友好数对。
如果两个整数的所有正因子之和(包括1,不包括自身)等于对方,就称这对数是友好的。例如:1184和1210是友好数对,因为
1184的因子之和为1+2+4+8+16+32+37+74+148+296+592=1210
1210的因子之和为1+2+5+10+11+22+55+110+121+242+605=1184
要求程序定义一个facsum ()函数和一个main()函数,facsum ()函数计算并返回n的所有正因子之和,其余功能在main()函数中实现。
int facsum (int n)
{
//计算n的所有正因子之和sum,本函数返回sum
}
Input

输入两个正整数m和n,1<m<=n<=10000。
Output
输出m和n之间的所有友好数对。
在输出每个友好数对时,要求小数在前、大数在后,并去掉重复的数对。例如,220和284是一对友好数,而284和220也是一对友好数,此时只需输出220和284这对友好数。每个友好数对占一行,两数之间用空格隔开。
如果m和n之间没有友好数对,则输出“No answer”。
Sample Input
100 8000
Sample Output
220 284
1184 1210
2620 2924
5020 5564
6232 6368
题意描述:
输入m和n(1<m<=n<=10000)
计算并输出m到n之间的友好数对(输出要求去重)
解题思路:
for循环枚举从m到n为i,计算i的因子和为j,如果j的因子和为i且i<j(去重),则输出i和j,如果两数之间没有友好数对,则输出“No answer”。
程序代码:

 1 #include<stdio.h>
 2 int Facsum(int n);
 3 int main()
 4 {
 5     int m,n,i,j,flag;
 6     while(scanf("%d%d",&m,&n) != EOF)
 7     {
 8         for(flag=0,i=m;i<=n;i++){
 9             j=Facsum(i);
10             if(i==Facsum(j)&&i<j){
11                 printf("%d %d\n",i,j);
12                 flag=1;
13             }
14         }
15         if(!flag)
16         printf("No answer\n");
17     }
18     return 0;
19  }
20 int Facsum(int n)
21 {
22     int i,sum;
23     for(sum=0,i=1;i<n;i++)
24         if(n%i==0)
25             sum += i;
26     return sum;
27 } 
时间: 2024-12-13 16:25:16

1105 判断友好数对的相关文章

1105: 判断友好数对(函数专题)

题目描述 输入两个正整数m和n,顺序输出m到n之间的所有友好数对. 如果两个整数的所有正因子之和(包括1,不包括自身)等于对方,就称这对数是友好的.例如:1184和1210是友好数对,因为 1184的因子之和为1+2+4+8+16+32+37+74+148+296+592=1210 1210的因子之和为1+2+5+10+11+22+55+110+121+242+605=1184 要求程序定义一个facsum ()函数和一个main()函数,facsum ()函数计算并返回n的所有正因子之和,其余

【数论】【枚举约数】【友好数】CODEVS 2632 非常好友

O(sqrt(n))枚举约数,根据定义暴力判断友好数. 1 #include<cstdio> 2 #include<cmath> 3 using namespace std; 4 int n; int limit; 5 int main() 6 { 7 scanf("%d",&n); 8 for(;;n++) 9 { 10 limit=sqrt(n); int tot=1; 11 if(limit*limit==n) tot+=limit; 12 for

zzuli oj 1105 友好数对

题意描述:输入两个正整数m和n,顺序输出m到n之间的所有友好数对. 如果两个整数的所有正因子之和(包括1,不包括自身)等于对方,就称这对数是友好的.例如:1184和1210是友好数对解题思路:编写函数计算出m-n每个整数的所有正因子之和,然后利用函数算出该因子和的因子和是否等于该数本身,输出原整数与其因子和.代码实现: 1 #include<stdio.h> 2 int facsum(int n) 3 { 4 int i,sum=0; 5 for(i=1;i<n;i++) 6 { 7 i

蓝桥杯 算法训练 ALGO-117 友好数

算法训练 友好数 时间限制:1.0s   内存限制:256.0MB 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 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是友好的. 编写程序,判断两个数是否是友好数. 输入格式 一行,两个整数,由空格分隔 输出格式 如

[coci2011]友好数对 容斥

无趣的小x在玩一个很无趣的数字游戏.他要在n个数字中找他喜欢友好数对.他对友好数对的定义是:如果有两个数中包含某一个以上相同的数位(单个数字),这两个数就是友好数对.比如:123和345 就是友好数对,因为都包含数位3,显然123和234也是由号数对.而12和34则不是友好数对,因为它们没有相同的数位. 刚拿到题没怎么读懂,因为我直观的想法是存一下扫一遍就行了,后来一想,得用容斥:又犯蠢了: 其实这道题的容斥比较基本,看代码吧: #include<iostream> #include<c

48.输入任意正整数,编程判断该数是否为回文数(回文数是指从左到右读与从右到左读一样,如12321)

//1.输入一个数,将其每一位分离,并保存如一个数组 //2.判断数组最后录入的一位是第几位 //3.循环判断是否满足回问数的要求 #include<iostream> using namespace std; int main() { int n,temp; int k=0; int a[20]; cout<<"please input an number: "<<endl; cin>>n; for(int i=0;i<20;i+

判断一组数之中的最大数的两种方法

方法一:条件运算符 boolean_expression ? true_value : false_value; JS代码: <span style="font-size:14px;">var iNum=[23,100,5,89,4,89]; var iMax=iNum[0]; for(i=1;i<iNum.length-1;i++){ iMax=(iMax>iNum[i])?iMax:iNum[i]; } alert(iMax)</span> 方法

判断页数及切换

function sliPage(ele,pagecon,nums){ var end_box = $(ele), cons = $(pagecon), vli = cons.find('a'), vlen = vli.length, gg_var = nums, p = Math.ceil(vlen/gg_var), str = '', index = 0, cur = 'cur'; if(p == 1) return; vli.unwrap(); for(var i = 1;i <= p;i

判断奇偶数实例

隐藏行号 复制代码 ? 判断奇偶数 //判断是否为奇数和偶数 import java.util.Scanner; public class jsos { public static void main(String[] args) { System.out.print("请输入一个数字:"); Scanner i=new Scanner(System.in); int num=i.nextInt(); if (num<=0) { System.out.print("请输