[蓝蓝计算机考研算法训练二期]-day01

101 阅读1分钟

1、从键盘输入一个整数,判断该数是否为素数什么是素数,素数(质数)是指在大于1的自然数中,除了1和它 本身以外不再有其他因数的自然数。

思路:直接暴力破解

具体实现

#include <stdio.h>
int main()
{
	int n,i;
	printf("请输入一个数:\n");
	scanf("%d",&n);
	for(i=2;i<n;i++)
		if(n%i==0)
			break;
	if(i<n)
		printf("%d不是素数\n",n);
	else
		printf("%d是素数\n",n); 
	return 0;
} 

2、求解从2到20000的所有完数。所有的因数的和等于本身的数字称为完数

思路: 求出选取数值i的因子,即从1到i-1范围内能整除i的数,看某一个数j是否为i的因子,可利用语句if(i%j==0)进行判断,求某一个数的所有因子,需要在1到i-1范围内进行遍历,同样釆用循环实现。因此,本题从整体上看可利用两层循环来实现。外层循环控制该数的范围2〜n;内层循环j控制除数的范围为1〜i,通过i对j取余,是否等于0,找到该数的各个因子。 具体实现

#include<stdio.h>
int main()
{
    int i, j, s, n;  /*变量i控制选定数范围,j控制除数范围,s记录累加因子之和*/
    printf("请输入所选范围上限:");
    scanf("%d", &n);  /* n的值由键盘输入*/
    for( i=2; i<=n; i++ )
    {
        s=0;  /*保证每次循环时s的初值为0*/
        for( j=1; j<i; j++ )
        {
            if(i%j == 0)  /*判断j是否为i的因子*/
                s += j;
        }
        if(s == i)  /*判断因子这和是否和原数相等*/
            printf("It's a perfect number:%d\n", i);
    }
    return 0;
}