NBUT 1223 Friends number

暴力,打表。

计算出每一个数的因子之和,可以枚举$i$,让后将$i$的倍数都加上$i$。发现这样的只有$71$对,然后暴力就可以了。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<string>
#include<iostream>
using namespace std;

int f[5000010];
int xA[200],xB[200];

int main()
{
    for(int i=1;i<=5000000;i++)
    {
        int tmp=i+i;
        while(tmp<=5000000)
        {
            f[tmp]+=i;
            tmp+=i;
        }
    }

    int sum=0;
    for(int i=1;i<=5000000;i++)
    {
        int A=i,B=f[i];
        if(B>A&&B<5000000&&f[B]==i)
        {
            xA[sum]=A;
            xB[sum]=B;
            sum++;
        }
    }

    int L,R;
    while(~scanf("%d%d",&L,&R))
    {
        int ans=0;
        for(int i=0;i<sum;i++)
        {
            if(xA[i]>=L&&xA[i]<=R&&xB[i]>=L&&xB[i]<=R) ans++;
        }
        printf("%d\n",ans);
    }


    return 0;
}

 

posted @ 2017-03-28 18:15  Fighting_Heart  阅读(172)  评论(0编辑  收藏  举报