14 solutions
-
5
解题报告 撰写人:朱子轩 题意分析 质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。现在需要编写一个程序,判断输入的数是否为质数。 难度等级 ★☆☆☆☆ 解题思路 见到这个题,少不了筛素数的板子 首先给大家介绍几个筛素数的板子 1.根据定义:素数就是一个数除了1和他本身没有其他因数的数叫做质数。 于是我们对于一个n,可以可以从2枚举到n−1,从而判断这个数是不是质数。 优化1: bool prime1(int x) { if(x<2) return false; if(x==2) return true; for(int i=2;i<=x;i++) if(x%i==0) return false; return true; } 我们不难发现n的因数是成对出现的,所以对于任何一个整数n,我们只需要从1枚举到根号下n就可以了。 所以这个的时间复杂度就是O(根号下n) bool prime2(int x)//O(根号下n) { if(x<2) return false; if(x==2) return true; for(int i=2;i<=sqrt(x);i++) if(x%i==0) return false; return true; } 此方法的时间复杂度就大大减小,为O(三分之 根号下n) bool quick_prime(int x)//O(三分之根号下n) { if(x==2||x==3) return true; if(x%6!=1&&x%6!=5) return false; for(int i=5;i<=sqrt(x);i+=6) if(x%i==0||x%(i+2)==0) return false; return true; } 小结:在对于素数的判断时,一般用第一种的优化方法就可以了,但是如果遇到了毒瘤出题人,最好是用第二种方法。 那本题的思路就出来了,先判断这个数是不是素数, ull prime(ull x){ if(x==2||x==3) return 1; if(x%6!=1&&x%6!=5) return 0; for(int i=5;i<=sqrt(x);i+=6) if(x%i==0||x%(i+2)==0) return 0; return 1; } ull simple_prime(ull k){ if(!prime(k)){ if(k%2!=0&&k%5!=0&&k%3!=0){ return 1; } } return 0; } if(prime(n)||simple_prime(n)) { if(n==1) cout<<"No<<endl; else cout<<"Yes"<<endl; } else cout<<"No"<<endl; cpp #include<bits/stdc++.h> using namespace std; typedef unsigned long long ll; ll p(ll x){ if(x==2||x==3) return 1; if(x%6!=1&&x%6!=5) return 0; for(int i=5;i<=sqrt(x);i+=6) if(x%i==0||x%(i+2)==0) return 0; return 1; } ll s(ll k){ if(!p(k)){ if(k%2!=0&&k%5!=0&&k%3!=0){ return 1; } } return 0; } int main() { int n; cin>>n; if(p(n)||s(n)) { if(n==1) cout<<"No"<<endl; else cout<<"Yes"<<endl; } else cout<<"No"<<endl; return 0; } -
1
解题报告
撰写人: 钟志杰
题意分析
这道题就是让我们求这个数是不是质数,这道题就要用求质数的方法了!
难度等级
★☆☆☆☆
解题思路
这道题重点在于怎么判断质数,质数的判断方法如下:
1.质数数不能是1,因为质数要求是只有2个因数,而1只有1个因数。
2.质数只有2个因数。
3(附加).如果这个数为2的倍数(除了2),那这个数就不是质数解题反思
这道题就只是判断质数,很简单。
参考程序
#include<bits/stdc++.h> using namespace std; int n; bool zs(int x){//判断质数函数 if(x<=1) return 0;//如果≤1就不是质数 if(x%2==0&&x!=2) return 0;//判断二的倍数(除了2) for(int i=3;i*i<=x;i+=2){//一个个试探 if(x%i==0) return 0;//如果这个数有别的倍数,就不是质数 }return 1;//直到最后还没踢出去,就是质数 } int main(){//主函数 cin>>n; if(zs(n)) cout<<"Yes"; else cout<<"No"; return 0; } -
-1
解题报告
撰写人: 陈灏
题意分析
#602. 判断质数 质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。现在需要编写一个程序,判断输入的数是否为质数。
输入格式 一个整数n,其中2≤n≤1000000。
输出格式 如果n是质数,输出 "Yes";否则输出 "No"。
难度等级
★☆☆☆☆
解题思路
先定义和输出,再循环判断是不是质数然后输出Yes or No。
解题反思
无
参考程序
#include<bits/stdc++.h> using namespace std; int main(){ int n,c=1; cin>>n; for(int i=2;i<=n-2;i++){ if(n%i==0)c=0; } if(c==1)cout<<"Yes"; else{cout<<"No";} return 0; } ```# 解题报告 **撰写人:** 陈灏 ## 题意分析 #602. 判断质数 质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。现在需要编写一个程序,判断输入的数是否为质数。 输入格式 一个整数n,其中2≤n≤1000000。 输出格式 如果n是质数,输出 "Yes";否则输出 "No"。 ## 难度等级 ★☆☆☆☆ ## 解题思路 先定义和输出,再循环判断是不是质数然后输出Yes or No。 ## 解题反思 无 ## 参考程序 ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int n,c=1; cin>>n; for(int i=2;i<=n-2;i++){ if(n%i==0)c=0; } if(c==1)cout<<"Yes"; else{cout<<"No";} return 0; } -
-1
解题报告: 撰写人:李秉霖 题意分析: 这是一道简单的判断输入的数是否为质数的程序 难度等级: ★☆☆☆☆ 解题思路: 先利用bool类型然后再判断就可以了。 解题反思: 循环要从2开始 参考程序: #include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; bool isPrime=true; for(int i=2;i*i<=n; i++){ if(n % i == 0){ isPrime=false; break; } } if(isPrime){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } return 0; } -
-2
解题报告
撰写人: 潘梓莹
题意分析
如果n是质数,输出 "Yes";否则输出 "No"
难度等级
★☆☆☆☆
解题思路
无
解题反思
无
参考程序
#include<bits/stdc++.h> using namespace std; int n; int main() { cin>>n; bool zs=true; for (int i=2;i*i<=n;i++) { if(n%i==0) { zs=false; break; } } if(zs) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return 0; } -
-3
解题报告
撰写人: 朱梓霖
题意分析
问题描述:给定一个大于等于 2 的整数 n,判断它是否为质数。 质数的定义是:在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数。 输入格式: 一个整数 n。 输出格式: 如果 n 是质数,输出 "Yes";否则输出 "No"。
难度等级
★★☆☆☆
解题思路
我们首先假设输入的数字 n 是一个质数,并用一个布尔变量 isPrime 来表示这个状态,初始值为 true。我们使用一个 for 循环来检查 n 是否有除了 1 和它本身之外的因数。循环变量 i 从 2 开始。循环的终止条件是 i * i <= n。这是一个优化点,因为一个数 n 的因数如果存在,那么其中一个必然小于或等于其平方根。检查到其平方根 就足够了,可以减少循环次数。在循环中,对于每一个 i,我们检查 n 是否能被 i 整除(即 n % i == 0)。如果找到了一个可以整除 n 的 i,这说明 n 不是质数。 循环结束后,根据 isPrime 的值进行判断。 如果 isPrime 仍然是 true,说明在整个循环过程中没有找到任何能整除 n 的数,因此 n 是质数,输出 "Yes",否则,输出 "No"。
解题反思
代码缩进的重要性:良好的代码缩进可以极大地提高代码的可读性。 逻辑严谨性:在编写条件判断和循环时,一定要仔细梳理每一步的逻辑。 测试是关键:写完代码后,不要只测试一两个简单的案例。
参考程序
#include<bits/stdc++.h> using namespace std; int main(){ int n; bool isPrime=true; cin>>n; for(int i=2;i*i<=n;i++){ if(n%i==0)isPrime=false; break; } if(isPrime){ cout<<"Yes";} else{cout<<"No";} return 0;} -
-3
解题报告
撰写人: 梁倬菲
题意分析
判断一个数是指不是质数,如果是就输出"Yes",否则输出"No"。
难度等级
★★☆☆☆
解题思路
先定义 2 个整数 n 和 t,t=0,输入 n,用for循环从 2 开始到 n-1 一个一个查找 n 的因数🔍,找到一个 t 就加一,最后判断 t 是否等于0,如果等于就输出"Yes",否则输出"No"。
解题反思
反思
参考程序
#include<bits/stdc++.h> using namespace std; int main(){ int n,ans=0; cin>>n; for(int i=2;i<=n-1;i++){ if(n%i==0)ans++; } if(ans==0)cout<<"Yes"; else cout<<"No"; return 0; } -
-3
解题报告
撰写人: 陈斯伟
题意分析
质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。现在需要编写一个程序,判断输入的数是否为质数。
难度等级
★☆☆☆☆
解题思路
先判断,再输出
解题反思
: )
参考程序
#include<bits/stdc++.h> using namespace std; int main(){ int n; bool a=0; cin>>n; for(int i=2;i<n;i++){ if(n%i==0)a=1; } if(a==0) cout<<"Yes"; else cout<<"No"; return 0; } -
-3
解题报告
撰写人: 陈沛宜
题意分析
判断这个数是不是质数
难度等级
★☆☆☆☆
解题思路
先判断,再输出
解题反思
无
参考程序
#include<bits/stdc++.h> using namespace std; int main() { int a; cin>>a; bool isPrime=true; for (int i=2;i*i<=a;i++){ if (a%i==0){ isPrime=false; break; } } if (isPrime){ cout<<"Yes"<<endl; } else{ cout<<"No"<<endl; } return 0; } -
-3
[视频讲解](https://www.yuque.com/benyao-60fk1/axxvmq/ir0uup8ea973z27l?singleDoc# 《判断质数》)
这是一道判断质数的题。质数是大于 1 的自然数,除了 1 和它自身外,没有其他因数。我们要编写程序判断输入的 2 到 1000000 之间的整数是否为质数,若是则输出 “Yes”,否则输出 “No”。
解题步骤如下:
- 输入要判断的数 n,就像去超市要先明确买什么东西一样,这里就是明确要判断的对象。
- 从 2 开始,到 n 的平方根为止,逐个尝试能否整除 n。若能被其中一个数整除,说明 n 除了 1 和它本身还有其他因数,就不是质数。比如判断 9,2 不能整除 9,但 3 能整除 9,所以 9 不是质数;判断 7,2 和 3 都不能整除 7,且 7 的平方根约为 2 点多,试到 2 即可,说明 7 是质数。至于为什么试到平方根,以 16 为例,它的因数 2 和 8、4 和 4,若一个因数大于平方根(16 的平方根是 4),另一个因数必然小于平方根,所以试到平方根就能涵盖所有可能的因数。
- 根据判断结果输出 “Yes” 或 “No”。
对应的 C++ 代码如下:
#include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; // 输入要判断的数 bool isPrime = true; // 先假设这个数是质数 for (int i = 2; i * i <= n; i++) { // 从 2 开始试到 n 的平方根 if (n % i == 0) { // 如果 n 能被 i 整除 isPrime = false; // 说明 n 不是质数 break; // 不用再试后面的数了 } } if (isPrime) { // 如果还是假设的质数 cout << "Yes" << endl; // 输出 "Yes" } else { cout << "No" << endl; // 不是质数就输出 "No" } return 0; } -
-5
简单分析
🎯关键思路:根据质数的定义,质数是大于 1 且除了 1 和它自身外没有其他因数的自然数。我们可以从 2 开始到该数的平方根进行遍历,如果能被其中任何一个数整除,就不是质数。 ⚠易错点:要注意遍历范围到平方根即可,这样可以减少不必要的计算。同时,判断条件要准确,不能遗漏特殊情况。
详细解题报告
🌈题目
质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。现在需要编写一个程序,判断输入的数是否为质数。 输入格式:一个整数 n,其中 2 ≤ n ≤ 1000000。 输出格式:如果 n 是质数,输出 "Yes";否则输出 "No"。
💡题意分析 这道题就是让我们根据质数的定义,判断输入的整数是不是质数,然后按照要求输出结果。
⭐难度等级 ★★,对于小学生来说,理解质数的概念和实现判断逻辑有一定难度,但只要掌握方法,还是可以解决的。
🚀解题思路 我们可以用一个循环从 2 开始到该数的平方根进行遍历,如果这个数能被其中任何一个数整除,就说明它不是质数,输出 "No";如果都不能整除,就说明它是质数,输出 "Yes"。
💭解题反思 在解题过程中,要注意循环的范围,到平方根就可以了,这样可以提高效率。同时,要对质数的概念有清晰的理解,避免出现判断错误。
📝参考程序
#include<bits/stdc++.h> using namespace std; int main() { int n; // 定义一个整数变量 n 用于存储输入的数 cin >> n; // 从键盘读取输入的数 bool isPrime = true; // 定义一个布尔变量 isPrime 用于标记是否为质数,初始化为 true for (int i = 2; i * i <= n; i++) { // 从 2 开始到该数的平方根进行遍历 if (n % i == 0) { // 如果该数能被 i 整除 isPrime = false; // 标记为不是质数 break; // 跳出循环 } } if (isPrime) { // 如果是质数 cout << "Yes" << endl; // 输出 "Yes" } else { // 如果不是质数 cout << "No" << endl; // 输出 "No" } return 0; } -
-6
解题报告
撰写人: Jacy
题意分析
质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。现在需要编写一个程序,判断输入的数是否为质数。
输入格式 一个整数n,其中2≤n≤1000000。
输出格式 如果n是质数,输出 "Yes";否则输出 "No"。
难度等级
★☆☆☆☆
解题思路
用for循环判断n的因子是否能被n整除,如果是则输出no终止程序,若不是则输出yes
解题反思
无
参考程序
#include<bits/stdc++.h> using namespace std; int n; int main() { cin>>n; for(int i=2;i<n;i++) if(n%i==0){ cout<<"No"; return 0; } cout<<"Yes"; return 0; }
- 1
Information
- ID
- 602
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 1
- Tags
- (None)
- # Submissions
- 51
- Accepted
- 39
- Uploaded By