比赛 普及组2016模拟练习3 评测结果 AWWWWWWWWWW
题目名称 焰火表演 最终得分 9
用户昵称 jjky 运行时间 0.003 s
代码语言 C++ 内存使用 0.35 MiB
提交时间 2016-11-15 19:41:50
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#include<vector>
#include<cstring>
#include<set>
using namespace std;
const int maxc=105;
int c,n,a[maxc],b[maxc],d[10005],cn,cnt,sum;
int gcd(int x,int y){
	if(x<y)
		swap(x,y);
	if(y==0)
		return x;
	return gcd(y,x%y);
}
int main(){
	freopen("fireshow.in","r",stdin);
	freopen("fireshow.out","w",stdout);
	scanf("%d%d",&c,&n);
	int i,j;
	for(i=1;i<=c;i++){
		scanf("%d",&a[i]);
	}
	sort(a+1,a+1+c);
	for(i=1;i<c;i++){
		if(a[i]==0||a[i]==a[i+1])
			continue;
		for(j=i+1;j<=c;j++){
			if(a[j]==0)
				continue;
			if(a[j]%a[i]==0){
				a[j]==0;
			}
		}
		//if(a[i]!=0)
		b[++cn]=a[i];
	}
	if(a[c]!=0)
		b[++cn]=a[c];
	for(i=1;i<cn;i++){
		for(j=i+1;j<=cn;j++){
			d[++cnt]=b[i]*b[j]/gcd(b[i],b[j]);
		}
	}
	for(i=1;i<=cn;i++){
		sum+=n/b[i];
	}
	for(i=1;i<=cnt;i++){
		sum-=n/d[i];
	}
	printf("%d\n",sum);
	fclose(stdin);
	fclose(stdout);
	return 0;
}