zoukankan      html  css  js  c++  java
  • 1625: 【例 1】反素数 Antiprime

    1625: 【例 1】反素数 Antiprime

    【题目描述】

    原题来自:POI 2001

    如果一个大于等于 1

    的正整数 n,满足所有小于 n 且大于等于 1 的所有正整数的约数个数都小于 n 的约数个数,则 n 是一个反素数。譬如:1,2,4,6,12,24

    ,它们都是反素数。

    请你计算不大于 n

    的最大反素数。

    【输入】

    一行一个正整数 n

    【输出】

    只包含一个整数,即不大于 n

    的最大反素数。

    【输入样例】

    1000

    【输出样例】

    840

    【提示】

    数据范围与提示:

    对于 10% 的数据,1n103

    对于 40% 的数据,1n106

    对于 100% 的数据,1n2×109

      这道题是一本通的例题,虽然代码很短但是注释过于简单不变理解,洛谷大佬的题解太长又不想看。。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int a[20]={0,2,3,5,7,11,13,17,19,23,29};
    ll n,s,s1;
    void dfs(ll x,ll y,ll b,ll z)
    {
        if(x==11) return ;
        ll i,k=1;
        for(i=1;i<=b;i++)
        {
            k*=a[x];
            if(y*k>n) return ;
            if(z*(i+1)==s1&&y*k<s) s=y*k;
            if(z*(i+1)>s1)
            {
                s=y*k;
                s1=z*(i+1);
            }
            dfs(x+1,y*k,i,z*(i+1));
        }
    }
    int main()
    {
        scanf("%lld",&n);
        dfs(1,1,31,1);
        printf("%lld",s);
        return 0;
    }

     在上面的代码中:x表示目前检索的是第几个质因子;

            y表示目前已经得到的Antiprime;

            b表示上一个书的指数(所以i 才会从一开始循环到b就结束)

            z表示当前所取到的约数个数。

            s1表示的是目前可以取到的最大约数个数;s表示当前最小的Antiprime(即答案)

    喵内喵内
  • 相关阅读:
    web.xml配置详解
    javascript实现的网页打印
    C#实现新建文件并写入内容
    nodeJs学习过程之认识nodejs
    windows下nodejs与coffeeScript环境搭建
    javascript/css压缩工具---yuicompressor使用方法
    verilog描述表决器的两种方式简易分析
    verilog阻塞与非阻塞的初步理解(二)
    verilog阻塞与非阻塞的初步理解(一)
    FIFO学习心得
  • 原文地址:https://www.cnblogs.com/smartljy/p/11387057.html
Copyright © 2011-2022 走看看