[蓝蓝计算机考研算法]-day01判断该数是否为素数

256 阅读1分钟

1.从键盘输入一个整数,判断该数是否为素数

什么是素数

素数又叫质数,是指大于1的自然数中,除了1和它本身之外不再有其他因素的自然数

思路

通过数学知识我们可以知道,如果一个数是合数,那么一定至少存在分别 f1 < sqrt(n) < f2,使得 f1 与 f2 的乘积为 n ,因此,我们只需用从2到 sqrt(n) 的数轮流除 n ,若皆不能整除,则 n 为素数。

代码实现

 #include<iostream> 
 #include<cmath>
 using namespace std;
 /*判断一个数字是否为素数*/
bool is_prime_number(int n) ;
int main()
{
//读入需要判断的数字n
int n=0;
cout <<"请输入需要判断的数字n:\n" ;
cout<<"n=";
cin>>n;
//调用函数判断n是否为素数,并输出结果
if(is_prime_number(n) )
cout <<endl<<n<<"是素数\n";
else
cout <<endl<<n<<"不是素数\n";
return 0;
}
bool is_prime_number(int n) 
{
//从2到squr(n),分别除n,若整除,则返回
for (int i=2;i<=sqrt(n);i++) 
{
	if(n%i ==0)
	return 0;
	
}
//否则,返回1;为真
return 1; 
}
                                

2求解从2到20000的所有完数

什么是完数

所有真因素的和等于本身的数字成为完数

代码实现

   #include  <iostream>
   using namespace std;
   int main()
{
   int i, j, k, sum;//变量i表示控制选定数范围,j控制除数的范围,k键入所求范围上线,sum记录因子累加之和
   cout << "请输入所求整数范围上限:" << endl;
   cin >> k;//键入范围上限
   for (i = 2; i <= k; i++)
{
    sum = 0;//保证每一次循环sum都为0
      for (j = 1; j < i; j++)
    {
        if (i % j == 0)//判断j是否为i的因子
            sum += j;
    }
        if (sum == i)//判断因子和与i相等
        cout << "完数为:" << i << endl;
}

}