OJ P1161 亲和数

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<iomanip>
using namespace std;
int A,B;
long long  shuzhi;
long long a[500];//保存找过或间接找过的数
int summ=0;
long long dear(int n)//算n的亲和数
{
 shuzhi=1;
 for(int i=2;i<int(sqrt(double(n)));i++)
   if(n%i==0)
   {
  shuzhi+=i;
  shuzhi+=n/i;
   }
   if(n%int(sqrt(double(n)))==0) shuzhi+=int(sqrt(double(n)));
 return shuzhi;
}
int main()
{
 int zz=1;
 memset(a,0,sizeof(a));//数组赋初值0
 cin>>A>>B;
 for(int i=A;i<=B;i++)
 {
  bool q=1;//开布尔值判断
  for(int j=1;j<=zz;j++)
   if(a[j]==i) {q=0;break;}//搜寻当前枚举的i值是否已在数组a中
  if(!q) continue;
  if((i==dear(dear(i)))&&(i<dear(i)))//注意一定i<dear(i)!!!
  {
   a[++zz]=i;
   a[++zz]=dear(i);
   
   summ++;
  }//如果找到一组亲和数对且i<j就记录
 }
 cout<<summ<<endl;//输出数对总数

return 0;
}


错了4遍都是在i<dear(i)上。要想清楚大小关系。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值