TOJ 4115 Find the number

原创 2015年07月09日 19:57:29

I forget mark value = minValue ,so I get WA one day.So sad a story.

The portal:http://acm.tju.edu.cn/toj/showp4115.html

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>

double minValue;
long long Mod = 1e9 + 7;
int prime[14] = {3,5,7,11,13,17,19,23,29,31,37,41,43,47};
int best[14],temp[14];

void DFS(const int & depth,const int & now,const double & value){
    if(value >= minValue){
        return;
    }
    if(now == 1){
        if(value < minValue){
            minValue = value ;
            for(int i=0;i<14;i++){
                best[i] = temp[i];
            }
        }
        return ;
    }
    if(depth >= 14) return ;
    for(int i=1;i<=sqrt(now);i++){
        if(now % i == 0){
            int t = i;
            if(t > 1){
                temp[depth] = t - 1;
                DFS(depth+1,now/t,value+(t-1)*log(prime[depth]));
                temp[depth] = 0;
            }
            t = now / i;
            if(t > 1){
                temp[depth] = t - 1;
                DFS(depth+1,now/t,value+(t-1)*log(prime[depth]));
                temp[depth] = 0;
            }
        }
    }
}

long long Quick_pow(const int &x,int k){
    long long ret = 1,base = x;
    while(k){
        if(k&1){
            ret = (ret * base) % Mod;
        }
        base = (base * base) % Mod;
        k >>= 1;
    }
    return ret;
}

int main(void){
    //freopen("a.in","r",stdin);
    int n;
    while(scanf("%d",&n)!=EOF){
        memset(best,0,sizeof(best));
        memset(temp,0,sizeof(temp));
        minValue = (n-1)*log(3.0);
        best[0] = n - 1;
        DFS(0,n,0);
        long long ans = 1;
        for(int i=0;i<14;i++){
            ans = (ans * Quick_pow(prime[i],best[i])) % Mod;
        }
        printf("%lld\n",ans);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

TOJ 3105.A Way To Find Primes(埃式筛法)

题目链接:http://acm.tju.edu.cn/toj/showp3105.html 3105.   A Way To Find Primes Time Limit:...

toj 4613 Number of Battlefields

toj 4613 Number of Battlefields 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 8 ...

[toj1136]Humble Number

只含有质因数2,3,5,7的数叫Humble Number,输入n,输出第n个H

TOJ--3071:Number Game (BFS)

1. 题目源地址:http://acm.tju.edu.cn/toj/showp.php?pid=3071 2. 题目大意:给出P和K两个数...

TOJ 3771 HDU 4162 Shape Number / 最小表示法

#include #include char a[300010],str[300010];int work(int m){ int i,j,l; i=0; j=1; while(i str[(j+l)...

448. Find All Numbers Disappeared in an Array \ 414. Third Maximum Number

448法一:class Solution { public: vector findDisappearedNumbers(vector& nums) { int nums_le...

UVAlive 4683 Find The Number

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14336 题意:给一个含k个数的集合,符合条件的数当且仅当...

Find the Duplicate Number leetcode 287

题目大意:找到数组中唯一的一个重复的数值。时间复杂度要小于O(n^2),不能修改数组了。 发现一个很6的算法,把数组当成一个静态链表,也就是说nums[],数组相当于next[],0为起始节点,节点地...
  • tbestcc
  • tbestcc
  • 2015年09月29日 11:54
  • 438

poj 1019 Number Sequence && hdu 1597 find the nth digit(二分,模拟)

两个题很相似,都是问你第i位是几,但排列的顺序有点不太一样. hdu 1597的每个单位是前一个单位后加个1-9中的一个循环添加; poj 1019的每个单位是前一个单位后加(i+1) 思路都一样...
  • CillyB
  • CillyB
  • 2017年02月27日 21:42
  • 176

Leetcode 287. Find the Duplicate Number

Leetcode :Find the Duplicate Number(找数组中的重复元素)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TOJ 4115 Find the number
举报原因:
原因补充:

(最多只允许输入30个字)