题目:输入一个整数n,判断是不是素数,并输出判断结果。

数学原理:素数是只有1和它本身两个因数的数。对于素数,我们需要知道3点。

第一,1不是素数。

第二,2是素数。

第三,除2以外的偶数都不是素数。

那么,对于一个不是1和2也不是偶数的数,我们就需要判断n能否整除3到根号n任意一个数。若能整除,则不是素数,若不能,则是素数。

另:为什么只判断到根号n呢?因为把一个数分解成两个数相乘,这两个数与根号n只有2种情况。

1.这两个数都等于根号n   

2.一个数大于根号n,另一个数小于根号n

所以,我们需要分类讨论n的情况。

1.n<=1,不是素数 

2.n=2,是素数

3.n是除2以外的偶数,不是素数

4.n是除1以外的奇数,n能整除3到根号n的任意数,不是素数。不能则是素数。

具体可以用这样两张图表示。

代码实现:bool函数,for循环

#include<bits/stdc++.h>
using namespace std;

bool isPrime(int n)
{
	if(n <=1) return false;
	else if(n == 2) return true;
	else if(n %2 ==0) return false;
	
 	else for(int i=3;i <= sqrt(n);i+=2)
	{
		if(n % i==0) return false;
	}
	return true;
}
int main()
{
	int n;
	cin >>n ;
	if(isPrime(n))  cout << "yes" << endl;
	else cout << "no" << endl;
	return 0;
}

题型2:完美素数

在素数的基础上再加一个条件,这个素数各个位上的数字之和也是素数。

可以用嵌套函数。

#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n)
{
  if(n <=1) return false;
  if(n == 2) return true;
  if(n % 2 == 0) return false;
  for(int i = 3;i <= sqrt(n);i += 2)
  {
     if(n % i == 0) return false;
  }
  return true;
}

int isper(int n)
{
    int sum =0;
    while(n!=0)
    {
      sum += n % 10;
      n /= 10;
    }
    return sum;
}
int main()
{
  int n;
  while(cin >> n)
  {
    if(isprime(n)&&isprime(isper(n)))
    {
        
        cout << "YES" << endl;
        
    }
    else cout << "NO" << endl;
  }
  return 0;
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐