本题解为第十一届软件类校内模拟赛我的题解,但非官方满分题解,所以,可能存在下列问题ios
题意理解错误,致使答案错误。
代码中存在一些问题,致使答案错误。
算法复杂度的分析有误,致使不能在规定时间内得出结果。
因报名属于软件类,故本篇题解所有由 C++ 语言完成,第一次进行校内模拟,没有想到没法查看题目,且木得官方题解,所以题目名称是根据问题描述总结(已忘记题目原名称qwq)。c++
所以蒟蒻在此提供思路为主,附有非题解代码,若有出错(颇有可能)欢迎大佬们指正,祝大佬们们在正赛中取得好成绩。web
定三个整数 a, b, c,若是一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数。请问在 1 至 n 中有多少个反倍数。算法
输入格式
输入的第一行包含一个整数 n。
第二行包含三个整数 a, b, c,相邻两个数之间用一个空格分隔。
输出格式
输出一行包含一个整数,表示答案。
样例输入
30
2 3 6
样例输出
10
样例说明
如下这些数知足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
评测用例规模与约定
对于 40% 的评测用例,1 <= n <= 10000。
对于 80% 的评测用例,1 <= n <= 100000。
对于全部评测用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。svg
这个数据比较小也好整,遍历一遍扫一下用%法取得胜利√spa
代码:code
#include<bits/stdc++.h> typedef long long ll; const int inf = 10000000 + 10; const int sz = 100010; using namespace std; #define ri register int inline void rd(int &x){ char c=getchar();bool f=0;x=0; while(c>'9'||c<'0'){ if(c=='-')f=1;c=getchar();} while(c<='9'&&c>='0'){ x=x*10+c-'0';c=getchar();} if(f) x*=-1;} inline void we(int x){ if(x<0) putchar('-'),x*=-1; if(x/10) we(x/10); putchar(x%10+'0');} int n,t,a,b,c; int ans,sum,num; int main() { //std::ios::sync_with_stdio(false); rd(n); rd(a);rd(b);rd(c); for(ri i=1;i<=n;++i) { if(i%a!=0&&i%b!=0&&i%c!=0) num++; } cout<<num; return 0; }
方法千万条,AC第一条,这里所写的都仅供参考,以大赛官方为准啦,在此摆出以供大佬取其精华,去其糟粕,祝诸位大佬们节节高!xml