25 条题解
-
9
几种方法供大家选择: ①无函数无num:
#include <iostream> using namespace std; int main() { int x; cin >> x; for (int i = 2; i < x; i++) { if (x % i == 0) { cout << i; return 0; } } cout << "Yes"; return 0; }
②无函数有num:
#include <iostream> using namespace std; int num = 0; int main() { int x; cin >> x; for (int i = 2; i < x; i++) { if (x % i == 0) { cout << i; num++; break; } } if (num == 0) { cout << "Yes"; } return 0; }
③无函数有bool:
#include <iostream> using namespace std; int main() { int x; cin >> x; bool flag = true; for (int i = 2; i < x; i++) { if (x % i == 0) { cout << i; flag = false; break; } } if (flag) { cout << "Yes"; } return 0; }
④有函数(void):
#include <iostream> using namespace std; void prime(int x) { bool flag = true; for (int i = 2; i < x; i++) { if (x % i == 0) { cout << i; flag = false; break; } } if (flag) { cout << "Yes"; } } int main() { int y; cin >> y; prime(y); return 0; }
⑤时间复杂度:
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 5; int n, pri[MAXN], cnt; bool vis[MAXN]; void Euler() { for (int i = 2; i < MAXN; ++i) { if (!vis[i]) { pri[cnt++] = i; } for (int j = 0; j < cnt; ++j) { if (1ll * i * pri[j] >= MAXN) { break; } vis[i*pri[j]] = 1; if (i % pri[j] == 0) { break; } } } vis[0] = vis[1] = 1; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); Euler(); cin >> n; if (!vis[n]) { cout << "Yes"; return 0; } else { for (int i = 2; i <= n; i++) { if (n % i == 0) { cout << i; return 0; } } } return 0; }
以上几种方法都是AC过的,大家可以选择自己理解的方法来编。
-
8
今天这题是简单的循环,我看了题解,发现都太复杂了,我来发发思路吧~
- 首先遍历从 2 ~ n - 1,也就是如果能整除就不是质数的循环
- 每一次都判断一次 n % i 是否等于 0
- 成立:直接输出(因为已经是最小约数了),并且结束代码
- 不成立到最后的:输出“Yes”就好啦~
上代码吧~(AC过~)
#include <bits/stdc++.h> using namespace std; int main() { int n, s = 1; cin >> n; for (int i = 2; i <= n - 1; i++) { if (n % i == 0) { cout << i; return 0; } } cout << "Yes"; return 0; }
-
4
高级写法 欧拉筛 时间复杂度O(n);
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6+5; int n,pri[MAXN],cnt; bool vis[MAXN]; // 如果a是素数,则vis[a]==false / vis[a]==0; void Euler(){ // 欧拉筛 for(int i=2;i<MAXN;++i){ if(!vis[i])pri[cnt++]=i; for(int j=0;j<cnt;++j){ if(1ll*i*pri[j]>=MAXN)break; vis[i*pri[j]]=1; if(i%pri[j]==0)break; } } vis[0]=vis[1]=1; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); Euler(); cin>>n; if(!vis[n]){ cout<<"Yes"; return 0; }else{ for(int i=2;i<=n;i++){ if(n%i==0){ cout<<i; return 0; } } } return 0; }
-
1
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6+5; int n,pri[MAXN],cnt; bool vis[MAXN]; // 如果a是素数,则vis[a]==false / vis[a]==0; void Euler(){ // 欧拉筛 for(int i=2;i<MAXN;++i){ if(!vis[i])pri[cnt++]=i; for(int j=0;j<cnt;++j){ if(1ll*i*pri[j]>=MAXN)break; vis[i*pri[j]]=1; if(i%pri[j]==0)break; } } vis[0]=vis[1]=1; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); Euler(); cin>>n; if(!vis[n]){ cout<<"Yes"; return 0; }else{ for(int i=2;i<=n;i++){ if(n%i==0){ cout<<i; return 0; } } } return 0; }
-
0
看了一下题解,发现都太复杂了。
(AC)
#include <bits/stdc++.h> using namespace std; int main() { int n; bool f = true; cin >> n; for (int i = 2;i * i <= n;i++) { if (n % i == 0) { f = false; cout << i;//输出除1以外的最小因数 break;//退出循环 } } if (f) { cout << "Yes" << endl; } return 0; }
(doge)
#include <bits/stdc++.h> using namespace std; int main() { cout << "Yes"; return 0; }
-
0
比较简单,用bool变量记录是否是素数,不是的话将bool设为false(默认为true),输出i,break。是的话最后的if就会为true输出Yes。
int n; bool flag = true; cin>>n; for(int i = 2 ; i < n ; i++) { if(n % i == 0) { cout<<i; flag = false; break; } } if(flag) { cout<<"Yes"; } 核心代码如上(套个#include<>基本的头文件即可运行,已AC(建议用#include<bits/stdc++.h>)
-
-1
最长代码和最短代码:
// 最长代码: #include <bits/stdc++.h> using namespace std ; const int MAXN = 1e6 + 5; int n, pri[MAXN], cnt; bool vis[MAXN]; void Euler() { for (int i = 2; i < MAXN; ++i) { if (!vis[i]) { pri[cnt++] = i; } for (int j = 0; j < cnt; ++j) { if (1ll * i * pri[j] >= MAXN) { break; } vis[i*pri[j]] = 1; if (i % pri[j] == 0) { break; } } } vis[0] = vis[1] = 1; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); Euler(); cin >> n; if (!vis[n]) { cout << "Yes"; return 0; } else { for (int i = 2; i <= n; i++) { if (n % i == 0) { cout << i; return 0; } } } return 0; } // 最短代码 #include<iostream> int main(){std::cout<<"Yes";}
信息
- ID
- 62
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 3
- 标签
- 递交数
- 2045
- 已通过
- 1084
- 上传者