2016.1.27
试题描述 |
给定a1,a2,…,am,求1到n的整数中至少能整除a中一个元素的数有几个? |
输入 |
输入n,m,和含有m个元素的集合,三者用空格分开 |
输出 |
输出可以整除a中一个元素的个数。 |
输入示例 |
100 2 {2,3} |
输出示例 |
67 |
其他说明 |
限制条件:1≤n≤10的9次方。 1≤m≤15 |
题干上四个大字容斥原理,你还有什么道理不用!
状压暴搜都可以的啦~
AC代码:
#include<iostream> using namespace std; int n,m,a[20],ct,tot,ans; char ch; inline int read() { int x,f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=-1; for(x=ch-‘0‘;isdigit(ch=getchar());x=x*10+ch-‘0‘); return x*f; } int main() { n=read();m=read(); for(int i=1;i<=m;i++) a[i]=read(); for(int i = (1 << m) - 1 ; i >= 1 ; i-- ) { ct=0;tot=1; for(int j = m - 1 ; j >= 0 ; j-- ) { if(1<<j & i) ct++,tot*=a[j+1]; } tot=n/tot; if(ct+1 & 1) tot=-tot; ans+=tot; } cout<<ans; }
时间: 2024-10-11 00:11:26