1002.反质数

定义:将正整数 �x 的约数个数表示为 �(�)g(x) 。例如,�(1)=1g(1)=1,�(4)=3g(4)=3,�(6)=4g(6)=4。

如果对于任意正整数 �y,当 0<�<�0<y<x 时,�x 都满足 �(�)>�(�)g(x)>g(y), 则称 �x 为反质数。例如,整数 11,22,44,66 等都是反质数。

现在任意给定两个正整数 �,�M,N,其中,按从小到大输出其中(包括 �M 和 �N)的所有反质数。如果没有,则输出大写的 NO 。

输入格式

一行,包含两个正整数 �M 和 �N,用单个空格隔开。

输出格式

在一行内输出 �M 到 �N 的所有反质数,以逗号间隔。如果没有,则输出 NO

样例

输入样例
1 13
输出样例
1,2,4,6,12

数据范围

对于 30%30% 的数据,�<�≤2⋅103M<N≤2⋅103

对于 50%50% 的数据,�<�≤2⋅105M<N≤2⋅105

对于 70%70% 的数据,�<�≤3⋅106M<N≤3⋅106

对于 100%100% 的数据,�<�≤2⋅107M<N≤2⋅107

#include <cstdio>
#include <iostream>
using namespace std;
const int NN = 1e7;
int a[NN], k = 0;
// 计算正整数x的约数个数
int yueshu(int x)
{
    int count = 0;
    for (int i = 1; i <= x; i++)
    {
        if (x % i == 0)
        {
            count++;
        }
    }
    return count;
}

// 判断正整数x是否为反质数
bool find_1(int x)
{
    for (int i = 1; i < x; i++)
    {
        if (yueshu(x) <= yueshu(i))
        {
            return false;
        }
    }
    return true;
}

// 找出从M到N之间的所有反质数并输出
void find(int M, int N)
{
    for (int i = M; i <= N; i++)
    {
        if (find_1(i))
            a[k++] = i;
    }
}

int main()
{
    int M;
    int N;
    cin >> M >> N;
    find(M, N);
    if (k != 0)
    {
        for (int i = 0; i < k - 1; i++)
            cout << a[i] << ",";
        cout << a[k - 1];
    }
    else
        cout << "NO";
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨墨祺

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

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

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

打赏作者

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

抵扣说明:

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

余额充值