1.一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
#include <stdio.h>
#include <math.h>
int IsPerfect(int x);
int main()
{
int m;
printf("Input m:");
scanf("%d", &m);
if (IsPerfect(m)) /* 完全数判定 */
printf("%d is a perfect number\n", m);
else
printf("%d is not a perfect number\n", m);
return 0;
}
/* 函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数 */
int IsPerfect(int x)
{
int i;
int total = 0; /* 1没有真因子,不是完全数 */
for (i=1;i<x;i++)
{
if (x%i==0)
total = total + i;
}
return total==x ? 1 : 0;
}
2.设计一个函数MaxCommonFactor()利用辗转相除法计算两个正整数的最大公约数
#include <stdio.h>
int MaxCommonFactor(int a, int b);
int main()
{
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b);
x =MaxCommonFactor(a,b);
if (x != -1)
{
printf("MaxCommonFactor = %d\n", x);
}
else
{
printf("Input error!\n");
}
return 0;
}
//函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数
int MaxCommonFactor(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;
}
//函数功能: 计算两个正整数的最大公约数,递归版本<pre name="code" class="cpp"><p>int <span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;"><strong>MaxCommonFactor</strong></span>(int a,int b)</p>{
int r;
if(a<0 || b<0) return -1;
if(b==0)
r=a;
else
r=Gcd(b,a%b);
return r;
}
另一种版本:
int divisor(int a,int b)
{
int x = a<b?a:b; //求a,b的最小数
while(x)
{
if(a%x==0 && b%x==0)
break;
--x;
}
return x;
}3.设计一个函数MinCommonMultiple(),计算两个正整数的最小公倍数。
#include <stdio.h>
int MinCommonMultiple(int a, int b);
int main()
{
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b);
x = MinCommonMultiple(a,b);
if (x!=-1)
printf("MinCommonMultiple = %d\n", x);
else
printf("Input error!\n");
return 0;
}
//函数功能:计算两个正整数的最小公倍数,-1表示没有最小公倍数
int MinCommonMultiple(int a, int b)
{
int i;
if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数
for (i=1; i<b; i++)
{
if ((i*a)%b==0) return i * a;
}
return b * a;
}
4.设计一个函数,用来判断一个整数是否为素数。
#include <math.h>
#include <stdio.h>
int IsPrimeNumber(int number);
int main()
{
int n, ret;
printf("Input n:");
scanf("%d", &n);
ret = IsPrimeNumber(n);
if (ret!=0)
{
printf("%d is a prime number\n", n);
}
else
{
printf("%d is not a prime number\n", n);
}
return 0;
}
//函数功能:判断number是否是素数,函数返回非0值,表示是素数,否则不是素数
int IsPrimeNumber(int number)
{
int i;
if (number <= 1) return 0; // 负数、0和1都不是素数
for (i=2; i<sqrt(number); i++)
{
if (number%i==0) // 被整除,不是素数
return 0;
}
return 1;
}
来自哈尔滨工业大学MOOC课件
5.回文数
输出所有不超过n(取n<256)的、其平方具有对称性质的正整数(也称为回文数)。
如: 1*1=1; 2*2=4;3*3=9;11*11=121;1,2,3,11是回文数。
#include <stdio.h>
#include <stdbool.h>
bool isPalindrome(int num);
bool isPalindrome(int num) //判断回文数字
{
int pal = 0;
int origin = num;
while(num)
{
pal *= 10;
pal += num % 10;
num /= 10;
}
return pal == origin;
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=1;i<n;i++)
{
if(isPalindrome(i*i) && i<256) //打印回文数字
{
printf("%d\n",i);
}
}
return 0;
}
本文详细介绍了如何使用C语言实现完全数、最大公约数、最小公倍数及素数的判断算法,并通过实例展示了具体的实现过程。
1173

被折叠的 条评论
为什么被折叠?



