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

234 阅读1分钟

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

什么是素数:

素数一般指质数,质数是指在大于一的自然数中,除了1和它本身以外不再有其它因数的自然数

思路:

在设计算法时利用C语言的相关内容进行编写,首先可以达到从键盘输入一个数字N,通过算法来判断是否为素数,算法中引入字符i(2~n-1),如果能被i中的任何一个数整除,则表明n不为素数,循环结束,否则输出n为素数。

具体实现:

# include <stdio.h> int main () {

int i,n;
printf("please input a number:\n");
scanf("%d",&n);
for(i=2;i<n;i++)
   if(n%i==0) break;//上述循环终止就可以判断n是否为素数 
   if(i<n){
	//printf("%d",n);//说明有一个数能整除n不符合素数的要求 
printf(" %d 不是素数\n ",n);
}
else{
	printf("%d",n);//说明求得的n符合素数的基本要求 
printf("%d 是素数\n",n);
}
return 0;

}

做题遇到的问题:

很久没有做算法题;连基本的运算思想都没有记住,做题时忘记了scanf后面需要加取值符号“&”

2、求解从2~20000的所有完数。

什么是完数:

他的所有真因子的和正好等于其本身,如果一个数恰好等于他的因子之和,则称该数为完数。

思路:

利用C语言进行编写,首先可以先设计好排版,对于完数的定义可以写出第一个函数用来判断是否为完数,也就是对num与i进行取余,若有效结果之和恰好等于num,即可求得完数。

实现:

#include <stdio.h> #include <stdlib.h> int main() {

int getNum;
printf("请输入一个范围num:");
scanf("%d",&getNum);
    printf("0~20000的完数是:");
getPerfectNum(getNum);
return 0;

} void isPerfectNum (int num) {

int sum = 0;
int i;
for(i=1;i<num;i++)//穷举num的每一个因数

{ if(num % i==0) sum += i; } if(sum == num)//num与因数和相等,则为完数 { printf("%d\n",num); } } void getPerfectNum(int getNum) {

int num;
for(num=2;num<=getNum;num++)
{
	isPerfectNum(num);
}	

}