or2?Scum! 西安电子科技大学第二届程序设计新生赛(同步赛)
链接:https://ac.nowcoder.com/acm/contest/316/E
来源:牛客网
题解: 容斥原理, 四个集合的容斥
A∪B∪C∪D=|A|+|B|+|C|+|D| - |A∩B| - |B∩C| - |C∩A|- |A∩D| - |B∩D| - |C∩D|
+|A∩B∩C|+|A∩B∩D| +|A∩C∩D| +|B∩C∩D| -|A∩B∩C∩D|
代码
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int main(){
ll n;
while(scanf("%lld",&n)!=EOF){
if(n%2==0||n%3==0||n%5==0||n%7==0){
cout<<"or2 ";
cout<<n/2+n/3+n/5+n/7 -n/6-n/10-n/14-n/15-n/21-n/35 +n/30+n/42+n/105+n/70 -n/210<<endl;
}
else{
cout<<"Scum"<<endl;
}
}
return 0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
当一个正整数能被2或者3或者5或者7整除,我们定义这个数为or2数 给定正整数 ,
求问这个数是否是or2数,如果是,则输出他是第几大的or2数,否则输出Scum
输入描述:
多组数据(不超过1e5组,读到文件结束)
每组数据一行:一个正整数x(1≤x≤1e18)
输出描述:
对于每个输入,输出一行。
如果是or2数,输出or2 c,表示它是第c大的or2数 否则输出字符串Scum
示例1
输入
2
4
11
输出
or2 1
or2 3
Scum