反素数 Antiprime

该博客介绍了反素数的概念,即所有小于自身且大于等于1的正整数的约数个数都小于它的约数个数。博主提供了一个C++程序,用于寻找不超过给定数n的最大反素数。程序利用了质数表进行递归搜索,找到最大反素数为840。
摘要由CSDN通过智能技术生成

反素数 Antiprime
【题目描述】
原题来自:POI 2001
如果一个大于等于 1的正整数 n,满足所有小于 n 且大于等于 1 的所有正整数的约数个数都小于 n 的约数个数,则 n 是一个反素数。譬如:1,2,4,6,12,24,它们都是反素数。请你计算不大于 n的最大反素数。
【输入】
一行一个正整数 n
【输出】
只包含一个整数,即不大于 n的最大反素数。
【输入样例】
1000
【输出样例】
840

#include<stdio.h>
typedef long long ll;
ll prime[]={0,2,3,5,7,11,13,17,19,23,29,31};
ll n,ges=0,ans=0;
void dfs(ll now,ll ges_s,ll sum,ll k)
{
    if(ges_s>ges)
    {
        ges=ges_s;
        ans=sum;
    }
    else if(ges_s==ges&&sum<ans)
        ans=sum;
    for(int i=1;i<=k;i++)
    {
        sum=sum*prime[now];
        if(sum>n)
            return ;
        dfs(now+1,ges_s*(i+1),sum,i);
    }
}
int main()
{
    scanf("%lld",&n);
    dfs(1,1,1,31);
    printf("%lld\n",ans);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值