10 条题解
-
1
理论上讲,由于c++的特性
int直接舍弃小数位我们分类讨论:
如果n为平方数
那么sqrt(n)*sqrt(n)=n
刚好可以判断到如果n不是平方数
那么sqrt(n)*sqrt(n)<n
okk什么?你问我为啥不是枚举到n/2?
随便拆一个数举例子:
12
=1 x 12
=2 x 6
=3 x 4
可以发现,左右两个数列都在逼近sqrt(12)
而c++特性告诉我们:int(sqrt(12))=3
所以说直接从2枚举到sqrt(n)就可以了
1肯定不用枚举
你家哪个整数不能被1整除啊......#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; for(int i=2;i<=sqrt(n);i++){ if(n%i==0){ cout<<"no"; return 0; } } cout<<"yes"; return 0; }
-
1
楼下的无敌,发现大伙儿们都写函数。
我整个对下一届初级班友好一点儿的,带注释:
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n;//输入,不必多说。 if(n==1) { cout<<"no"; return 0; } for(int i=2;i*i<=n;i++)//时间复杂度根号 n,算个优化,因为一旦 i 大于根号 n,n 取余 i 就不会等于 0 了。 { if(n%i==0) { cout<<"no"; return 0;//输出完直接 return!(顺便少定义个 flag 啊哈哈哈哈) } } cout<<"yes"; return 0; }
-
0
直接写一个函数即可。
也可以直接筛。#include<bits/stdc++.h> #define int long long #define INF 0x3f3f3f using namespace std; int n; bool prime(int x){ if(x<2)return 0; for(int i=2;i*i<=n;i++) if(!(n%i))return 0; return 1; } signed main(){ cin>>n; if(prime(n))cout<<"yes"; else cout<<"no"; return 0; }
-
0
C++ :
#include<bits/stdc++.h> using namespace std; int ss(int x){ if(x<2)return false; if(x==2)return true; for(int i=2;i<=sqrt(x)+1;i++){ if(x%i==0)return false; } return true; } int main(){ int a; cin>>a; if(ss(a))cout<<"yes"; else cout<<"no"; return 0; }
Python :
# coding=utf-8 n=int(input()) flag=0 for i in range(2,n): if n%i==0: flag=1 print("no") break if flag==0: print("yes")
- 1
信息
- ID
- 3
- 时间
- 5000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 77
- 已通过
- 46
- 上传者