C语言学习笔记:素数、最大公约数、最小公倍数问题
1.判断一个整数是否素数
//(1)求一个整数是否为素数(flag标志语句,函数)
#include <stdio.h>
#include <math.h>
int Primenum(int m){
int i, flag= 1;
if(m<= 1)
flag= 0;
for(i= 2; i<= m-1/*或者i<= (int)sqrt(m)*/; i++){
if(m%i== 0)
flag= 0;
}
return flag;
}
int main(){
int m, ret;
do{
printf("请输入一个整数:\n");
scanf("%d", &m);
ret= Primenum(m);
if(ret==0)
printf("%d 不是素数。\n\n", m);
else
printf("%d 是素数。\n\n", m);
}while(m!=0);
return 0;
}
//(2)求一个整数是否为素数(goto语句)
#include <stdio.h>
#include <math.h>
int main(){
int m, i;
do{
printf("请输入一个整数:\n");
scanf("%d", &m);
if(m<= 1){
printf("%d 不是素数。\n\n", m);
goto end;
}
for(i=2; i<= (int)sqrt(m); i++){
if(m%i== 0){
printf("%d 不是素数。\n\n", m);
goto end;
}
}
printf("%d 是素数。\n\n", m);
end:;
}while(m!=0);
return 0;
}
//(3)求一个整数是否为素数(break语句)
#include <stdio.h>
#include <math.h>
int main(){
int m, i;
do{
printf("请输入一个整数:\n");
scanf("%d", &m);
if(m<= 1){
printf("%d 不是素数。\n\n", m);
continue;
}
for(i=2; i<= (int)sqrt(m); i++){
if(m%i== 0)
break;
}
if(i> (int)sqrt(m))
printf("%d 是素数。\n\n", m);
else
printf("%d 不是素数。\n\n", m);
}while(m!=0);
return 0;
}
2.求两个正整数的最大公约数
//求两个正整数的最大公约数(辗转相除法)
#include <stdio.h>
int Findmcf(int a, int b){
int r;
if(a<=0 || b<= 0)
return 1;
do{
r= a%b;
a= b;
b= r;
}while(r!= 0);
return a;
}
int main(){
int a, b, ret;
do{
printf("请输入两个正整数:\n");
scanf("%d %d", &a, &b);
ret= Findmcf(a, b);
if(ret== 1)
printf("输入有误。\n\n");
else
printf("这两个正整数的最大公约数为 %d。\n\n", ret);
}while(a>0);
return 0;
}
3.求两个正整数的最小公倍数
//求两个正整数的最小公倍数
#include <stdio.h>
int Findmcm(int a, int b){
int i;
if(a<= 0 || b<= 0)
return 1;
for(i=1; i<b; i++)
if((a*i) % b== 0)
return a*i;
return a*b;
}
int main(){
int a, b, i, ret;
do{
printf("请输入两个正整数:\n");
scanf("%d%d", &a, &b);
ret= Findmcm(a, b);
if(ret== 1)
printf("输入有误。\n\n");
else
printf("这两个正整数的最小公倍数为 %d。\n\n", ret);
}while(a>0);
return 0;
}