题目叙述:无
算法叙述:暴力+小小的优化
我的代码:
#include<iostream>
using namespace std;
int main()
{
int n,a,b,a_temp=1,b_temp=1,i;
while(cin>>n)
{
while(n--)
{
cin>>a>>b;
for(i=2;i*i<=a;i++)
{
if(a%i==0)
a_temp=a_temp+i+(a/i);
}
for(i=2;i*i<=b;i++)
{
if(b%i==0)
b_temp=b_temp+i+(b/i);
}
if((a==b_temp)&&(b==a_temp))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
a_temp=b_temp=1;
}
}
return 0;
}
优化:
1.打表(列出所有结果)
#include <stdio.h>
#include <string.h>
int a[600004];
int main()
{
int i,j,n,x,y;
memset(a,0,sizeof(a));
for (i=1;i<=600002/2;i++)
{
for (j=2*i;j<=600002;j=j+i)
{
a[j]+=i;<span style="white-space:pre"> </span>//i是j的约数,则a[j]+=i;a[j]为所有j的约数之和。
}
}
scanf("%d",&n);
while (n--)
{
scanf("%d%d",&x,&y);
if (a[x]==y&&a[y]==x)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}