SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )

亲和数

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对。 比如220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。 284的所有真约数和为: 1+2+4+71+142=220。 你的任务就编写一个程序,判断给定的两个数是否是亲和数。

输入

输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0≤A,B≤99999。

输出

对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。

示例输入

2
220 284
100 200

示例输出

YES
NO

代码:

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

int main()
{
	int n, m;
	int dd, ff;

	int i, j;
	int t;
	scanf("%d", &t);
	while(t--)
	{
		scanf("%d %d", &n, &m);
        dd=1;
		ff=1;
        for(i=2; i<=sqrt(n); i++)
		{
			if(n%i==0)
			{
				dd=dd+i+(n/i);
			}
		}
		for(j=2; j<=sqrt(m); j++)
		{
			if(m%j==0)
			{
				ff=ff+j+(m/j);
			}
		}
		if(dd==m && ff==n )
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
} 

/**************************************
	Problem id	: SDUT OJ 1221
	Result		: Accepted
	Take Memory	: 276K
	Take Time	: 0MS
	Submit Time	: 2015-01-09 19:49:49
**************************************/
时间: 2024-10-01 04:09:12

SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )的相关文章

[面试题]在数组中找出3个数使得它们和为0

给定一个数组S,试找出3个数a, b, c,使得a+b+c=0.也即从集合中找出所有的和为0的3个数. 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, 0, 1)和(-1, 2, -1).注意(-1,1,0)与(-1,0,1)算同一个解,所以不用重复考虑. 当然该例子集合的解也可以写成:(0, 1, -1)和(2, -1, -1). 参考了:http://blog.csdn.net/wangran51/article/details/8858398,他给

有两个变量a和b,不用“if”、“? :”、“switch”或其他判断语句,找出两个数中比较大的

1.问题 There are two int variables: a and b, don't use "if"."? :"."switch" or other judgement statement, find out the biggest one of the two numbers. (有两个变量a和b,不用"if"."? :"."switch"或其他判断语句,找出两个数中比较

【c语言】给一组数,只有一个数只出现了一次,其他所有数都是成对出现的。找出这个数

// 给一组数,只有一个数只出现了一次,其他所有数都是成对出现的.找出这个数 #include <stdio.h> int find_one(int arr[], int len) { int i = 0; int ret = 0; for (; i < len; ++i) { ret ^= arr[i]; } return ret; } int main() { int arr[] = { 1, 2, 3, 4, 1, 2, 3 }; printf("%d\n",

leetcode 1: 找出两个数相加等于给定数 two sum

问题描述 对于一个给定的数组,找出2个数,它们满足2个数的和等于一个特定的数,返回这两个数的索引.(从1开始) Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target,

【转】已知一个数出现的次数严格超过了一半,请用O(n)的复杂度的算法找出这个数

原文转自:http://blog.csdn.net/zhq651/article/details/7930284 方法1:既然过半,那么用这个数与其他数配对的话,剩余的数字一定还是过半的这个数字.因此可以通过不断删除不同的2个数,直到没有不同的2个数,那么这个数就是要找的数.证明:最坏情况下,只有这个数同别的数配对,并且被删除,剩下的仍旧是这个数,因此得证. 转自:http://www.cnblogs.com/python27/archive/2011/12/15/2289534.html 例:

LeetCode 18 4sum 找出4个数,使得他们的和等于target

题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target. Note: Elements in a quadruplet (a,b,c,d) must be in non-descending or

一组数据中只有一个数字出现一次,其他数成对出现,找出这个数

一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的,请找出这个数字. (使用位运算) 直接使用异或运算. 代码如下: #include<stdio.h> #include<stdlib.h> int main() { int arr[]={3,5,9,2,5,3,2};  int size=sizeof(arr)/sizeof(arr[0]); int i=0,find=0; for(;i<size;i++) { find^=arr[i];//循环进行异或运算 }

【面试题】-数组A中任意两个相邻元素大小相差1,找出某个数在数组A中的位置。(所有位置 )

题目描述 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置. 解题思路 对于目标t,由当前位置a[index]比较开始,下一个可能位置为index = abs(t-a[index]),因为要找出所有的位置,所以找出第一个下标位置之后,再从这个下标的下一个开始重新查找. 代码实现 #include <stdio.h> #include <stdlib.h> #include <math.h> int find_num(int a[

java中请给出例子程序:找出两个数的最大公约数和最小公倍数

9.2 找出12和8的最大公约数和最小公倍数.    (视频下载) (全部书籍) public class Test {    public static void main(String[] args) {        getcommon_mu(12,8);        getcommon_div(12,8);    }//计算 最大公约数  和  最小公倍数    static void getcommon_mu(int n, int m) {        int i, b, d;