码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1060 最复杂的数(数论,反素数)

时间:2017-05-23 14:11:58      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:const   ++   sig   min   .com   stream   ref   tps   数论   

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1060

题解:可以去学习一下反素数。

#include <iostream>
#include <cstring>
#define inf 1000000000000000007
using namespace std;
typedef unsigned long long ull;
const int M = 1e6 + 10;
ull n , dp[M];
int prime[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
void dfs(int deep , ull sum , int num) {
    dp[num] = min(dp[num] , sum);
    for(int i = 1 ; i <= 63 ; i++) {
        if(sum > 1e18 / prime[deep]) break;
        dfs(deep + 1 , sum * prime[deep] , num * (i + 1));
        sum *= prime[deep];
    }
}
int main() {
    int t;
    scanf("%d" , &t);
    for(int i = 0 ; i < M ; i++) dp[i] = -inf;
    dfs(0 , 1 , 1);
    while(t--) {
        scanf("%lld" , &n);
        int ans;
        for(int i = M - 1 ; i >= 1 ; i--) {
            if(dp[i] <= n && dp[i] != 0) {ans = i;  break;}
        }
        printf("%lld %d\n" , dp[ans] , ans);
    }
    return 0;
}

51nod 1060 最复杂的数(数论,反素数)

标签:const   ++   sig   min   .com   stream   ref   tps   数论   

原文地址:http://www.cnblogs.com/TnT2333333/p/6893570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!