解题思路:主要就是求约数之和(不包括自身)
注意事项:需要注意的是求的约束不要有重复的,比如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;
}
0.0分
3 人评分