1 条题解
-
7
——闲来无事,水题,三次才过,惊觉有坑,遂投此帖。
看了一下米纳桑的提交记录,发现大部分是90分WA样例1的,代码大概就是这样的:
#include<bits/stdc++.h> using namespace std; int n; int p(int n) { for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { return 1; } } return 0; } int main() { cin>>n; if(p(n)==1) cout<<"No"; else cout<<"Yes"; return 0; }
首先为啥这样写?
先插入一个质数的概念:质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
知道了这个概念自然就好做了,直接循环判断2-n之间有没有整除n的,有的话n就不是质数。
但是这里不用循环到n,因为你想想一个数的因数都是两两配对的,只有有小因数就会有一个和它乘积为n的大约数所以我们这里只用从2循环到sqrt(n)
是不是感觉没问题了?
BUT
只有90pts,样例1WA掉了
是不是有点怀疑人生了🌚再想想呢
欸盲生你发现了华点🤓☝️☝️
这个1有问题呀,上面的代码你输入1的话它会输出Yes,但是显然1不是质数也不是合数,我们的循环是从2开始的,当然就没有判断1,直接就输出Yes了当然会错
所以我们直接给它来个大特判
如果n==1直接输出No
你猜这样能不能过记得要return 0,不然会在后面多输出
看懂的是这个👍👍
AC code:
#include<bits/stdc++.h> using namespace std; int n; int p(int n) { for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { return 1; } } return 0; } int main() { cin>>n; if(n==1){cout<<"No";return 0;} if(p(n)==1) cout<<"No"; else cout<<"Yes"; return 0; }
我看谁敢直接copy,让你感受到什么是恶梦缠绕🤓☝️
信息
- ID
- 90
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 149
- 已通过
- 27
- 上传者