首页 > 其他 > 详细

ZOJ 2836 Number Puzzle 题解

时间:2019-08-31 14:19:01      阅读:80      评论:0      收藏:0      [点我收藏+]

题面

技术分享图片

 

 

 lcm(x,y)=xy/gcd(x,y)
 lcm(x1,x2,···,xn)=lcm(lcm(x1,x2,···,xn-1),xn)

#include <bits/stdc++.h>
using namespace std;
long long n,m;
long long a[1010];
long long gcd(long long a,long long b)
{
    if(!b){
        return a;
    }
    return gcd(b,a%b);
}
long long lcm(long long a,long long b)
{
    return a*b/gcd(a,b);
}
int vis[1010];
long long ans=0;
long long pre[110];
void dfs(register int dep,long long goal,long long now)
{
    if(dep>goal){
        if(goal%2==0){
            ans-=(m/now);
        }
        else{
            ans+=(m/now);
        }
        return;
    }
    for(register int i=pre[dep-1]+1;i<=n;i++){
        if(!vis[i]){
            pre[dep]=i;
            vis[i]=1;
            dfs(dep+1,goal,lcm(now,a[i]));
            vis[i]=0;
        }
    }
}
int main()
{
    freopen("div.in","r",stdin);
    freopen("div.out","w",stdout);
    cin>>n>>m;    
    for(register int i=1;i<=n;i++){
        cin>>a[i];
        ans+=(m/a[i]);
    }
    for(register int k=2;k<=n;k++){    
        dfs(1,k,1);
    }
    cout<<ans<<endl;
}

 

ZOJ 2836 Number Puzzle 题解

原文:https://www.cnblogs.com/kamimxr/p/11438719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!