zoukankan      html  css  js  c++  java
  • hdu 2521 反素数(打表)

    反素数

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5723    Accepted Submission(s): 3355


    Problem Description
    反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数。现在给你一个整数区间[a,b],请你求出该区间的x使g(x)最大。
     
    Input
    第一行输入n,接下来n行测试数据
    输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b].
     
    Output
    输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数.
     
    Sample Input
    3 2 3 1 10 47 359
     
    Sample Output
    2 6 240
     
    本来想找个反素数的题目练练手,结果碰到一水题。打表即可,,不过我这里也把反素数的模板贴上来。
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    int cnt[5005];
    void init(){
        for(int i=1;i<=5000;i++){
            for(int j=1;j*j<=i;j++){
                if(i%j==0){
                    if(j*j==i) cnt[i]++;
                    else{
                        cnt[i]+=2;
                    }
                }
            }
        }
    }
    int main()
    {
        init();
        int tcase;
        scanf("%d",&tcase);
        while(tcase--){
            int a,b;
            scanf("%d%d",&a,&b);
            int MAX = -1,res=a;
            for(int i=a;i<=b;i++){
                if(cnt[i]>MAX) {
                    MAX = cnt[i];
                    res = i;
                }
            }
            printf("%d
    ",res);
        }
        return 0;
    }

    以下是求[1,n]内反素数的模板。参考了acreamer大神:http://blog.csdn.net/ACdreamers/article/details/25049767

    /**此模板可求[1,b]之间的反素数*/
    #include<stdio.h>
    #include<string.h>
    #include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    using namespace std;
    typedef unsigned long long ULL;
    const ULL INF = ~0ULL;
    int p[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
    int ans,n;
    int best;
    void dfs(int dept,int limit,ULL tmp,int num)
    {
        ///到叶子结点,返回
        if(dept >= 16) return;
        ///num记录的因子个数,如果遇到更小的,就更新
        if(num > best)
        {
            best = num;
            ans = tmp;
        }
        ///当因子个数相同时,取值最小的
        if(num == best && ans > tmp) ans = tmp;
        for(int i=1;i<=limit;i++)
        {
            if(n/p[dept] < tmp) break;
            dfs(dept+1,i,tmp *= p[dept],num*(i+1));
        }
    }
    int main()
    {
        int tcase;
        scanf("%d",&tcase);
        while(tcase--){
            scanf("%d",&n);
            ans =INF;
            best = 0;
            dfs(0,63,1,1);  ///最大不会超过INF < 2^63
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    基于TMS320C6678、FPGA XC5VLX110T的6U CPCI 8路光纤信号处理卡
    KC705E 增强版 基于FMC接口的Xilinx Kintex7 FPGA K7 XC7K325T PCIeX8 接口卡
    基于Xilinx Kintex7 FPGA K7 XC7K325T PCIeX8 四路光纤卡
    IOS常用API
    数学和物理的公式
    [cocos2d]如何实现模态对话框
    使用加速器实现的定位算法
    cocos2d 粒子设计器
    陀螺仪操作摄相机,可以旋转,但角度(轴)还不对
    gluLookAt 的参数
  • 原文地址:https://www.cnblogs.com/liyinggang/p/5624877.html
Copyright © 2011-2022 走看看