解题思路:主要就是求约数之和(不包括自身)
注意事项:需要注意的是求的约束不要有重复的,比如6的约数(不包括自身)是123,当用循环求的时候,2和3是重复的,如果用sum加的话,会重复累加2和3。所以可以使用一个标记来记录所求的约数是否已经求过了。
参考代码:
#include<iostream>
class Dear{
public:
bool Input(void);
void Countdear(void);
private:
int time;
int numa[100];
int numb[100];
int suma;
int sumb;
};
bool Dear::Input(void)
{
std::cin >> time;
for (int a = 0;a < time;a++)
{
std::cin >> numa[a] >> numb[a];
if (numa[a] < 0 || numb[a] > 600000)
return false;
}
return true;
}
void Dear::Countdear(void)
{
int a = 0;
while (a < time)
{
int flag = 0;
suma = sumb = 0;
for (int b = 2;b < numa[a] / 2;b++)
{
if (b == flag)
break;
if (numa[a] % b == 0)
{
suma += b + numa[a] / b;
flag = numa[a] / b;
}
else
continue;
if (b == flag)
break;
}
for (int b = 2;b < numb[a] / 2;b++)
{
if (b == flag)
break;
if (numb[a] % b == 0)
{
sumb += b + numb[a] / b;
flag = numb[a] / b;
}
else
continue;
}
suma += 1;
sumb += 1;
if (suma == numb[a] && sumb == numa[a])
std::cout << "YES\n";
else
std::cout << "NO\n";
a++;
}
}
int main(void)
{
Dear dear;
if (!dear.Input())
return -1;
dear.Countdear();
return 0;
}
2 分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复