hi.好朋友

好朋友

题目背景

小可可和所有其他同学的手腕上都戴有一个射频识别序列号码牌,这样老师就可以方便的计算出他们的人数。很多同学都有一个“好朋友” 。如果 A A A 的序列号的约数之和恰好等于 B B B 的序列号,那么 A A A 的好朋友就是 B B B。在这里,一个数的约数不包括这个数本身。因为一些同学的号码约数和大于其他任何同学的号码,所以这些同学没有好朋友。一些同学有一个“非常好友” 。当两个同学互为“好朋友”时,他们就是一对“非常好友” 。注意在这道题中,忽略那些自己是自己的“非常好友”的情况。

题目描述

给定一个序列号 s s s,找出序列号不小于 s s s 的第一对“非常好友” 。

输入格式

只有一行一个整数 s s s,即给定的序列号下界。

输出格式

输出一行两个用空格隔开的整数 a a a b b b

a a a 表示第一个序列号不小于 s s s 的有“非常好友”的同学, b b b a a a 的“非常好友” 。(注:允许 b < s b<s b<s

样例 #1

样例输入 #1

206

样例输出 #1

220 284

提示说明

数据规模与约定
  • 对于 100 % 100\% 100% 的数据,保证 6 ≤ s ≤ 1.8 × 1 0 4 6\le s\le1.8\times10^4 6s1.8×104

代码内容

// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll sh(ll x) //计算x的约数之和
{
    ll ans=0;
    for(ll i=1;i<x;i++)
    {
        if(x%i==0)
            ans+=i;
    }
    return ans;
}

int main()
{
    ll s;
    cin>>s;
    
    for(ll i=s;;i++) //从s开始判断i是否为s的非常好友
    {
        ll t=sh(i);
        if(sh(t)==i&&i!=t) //判断i的约数之和与s相等
        {
            cout<<i<<" "<<t<<endl;
            return 0;
        }
    }
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值