1、MT1163孪生质数
在质数中,若两个质数之差为2,我们称之为孪生质数,例如(3、5)(5、7),输入2个正整数,判断他是不是孪生质数,输出YES或者NO。
格式
输入格式:
输入整型
输出格式:
输出YES或者NO
样例 1
输入:
2 6
输出:
NO
相关知识点
质数:
定义:
质数(Prime number,又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。 大于1的自然数若不是素数,则称之为合数(也称为合成数)。
注意:0,1既不是质数也不是合数。
判断方法:
按照质数的定义进行判断。即写一个循环,从2到输入数减1,判断除了1和输入数本身之外是否有其他的整数能整除输入数,如果有,那么直接输出NO,没有则继续向下判断。
分析过程
解决本题的思路就是首先判断两个输入数是否为质数,若有一个不是,则直接输出NO,若都是质数,则判断两数之差是否为2,若是则输出YES,若不是,则输出NO。
根据上述思路,我首先写出的代码如下:
#include<bits/stdc++.h>
using namespace std;
/*解题思路:
首先判断两个数是否为质数,若不是,则直接输出NO;
若都是,判断两者是否之和为2。
*/
int judge(int m,int n){
for(int i=2;i<m;i++){
if(m%i==0){
cout << "NO";
return -1;
}
}
for(int i=2;i<n;i++){
if(n%i==0){
cout << "NO";
return -1;
}
}
int l=m-n;
if(l==2){
cout << "YES";
}else{
cout << "NO";
}
return 0;
}
int main( )
{
int m,n;
cin >> m >> n;
judge(m,n);
return 0;
}
但是,却不能通过全部的用例:
于是,重新寻找原因, 发现我没有考虑0和1这两个特殊情况,除此之外,也没有考虑到输入大小的关系,如果 从小到大输入,那么相减之后,差值是负数,所以差值有两种情况2或者-2,所以修改了以上的错误之后,得到了正确运行的代码。
实现代码
#include<bits/stdc++.h>
using namespace std;
/*解题思路:
首先判断两个数是否为质数,若不是,则直接输出NO;
若都是,判断两者是否之和为2。
*/
int judge(int m,int n){
for(int i=2;i<m;i++){
if(m%i==0){
cout << "NO";
return -1;
}
}
for(int i=2;i<n;i++){
if(n%i==0){
cout << "NO";
return -1;
}
}
int l=m-n;
// if(l<0){
// l=(-1)*l;
// }
if(l==2||l==-2){
cout << "YES";
}else{
cout << "NO";
}
return 0;
}
int main( )
{
int m,n;
cin >> m >> n;
if(m==0||m==1||n==0||n==1){
cout << "NO";
}else{
judge(m,n);
}
return 0;
}
2、MT1167自守数II
输入正整数N,检查该数是否为自守数输出YES或者NO。当且仅当一个数的平方以与该数相同的数字结尾时,该数称为自守数。
格式
输入格式:
输入正整数N
输出格式:
输出YES或者NO
样例 1
输入:
76
输出:
YES
分析过程
看到本题的时候,第一想法是直接求出输入数的平方,然后求余计算出尾数判断是否和输入数的尾数相等。
按照上述思路,得到下面的代码:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int N;
cin >> N;
int a = pow(N,2);
if(a%10 == N%10){
cout << "YES";
}else{
cout << "NO";
}
return 0;
}
但是,上述的代码有一个用例无法通过:
这是为什么呢,我才要去分析~
分析了一下题目,发现,自守数代表的是输入数的平方的尾数是输入数,而不是输入数的尾数。
所以要怎么实现呢?明天再说吧(先参考一下别人的代码吧,明天继续思考)。
实现代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,l,m=1;
cin >> n;
l=n;
while(l>0){
m*=10;
l=l/10;
}
int k=n*n-n;
if(k%m==0) cout<<"YES";
else cout<<"NO";
return 0;
}
明天继续吧。