C语言实现素数,最小公倍数,最大公约数,回文数,质数,完数,水仙花数算法
来源:互联网 发布:小猪微信营销系统源码 编辑:程序博客网 时间:2024/05/22 13:05
1. 关于素数的算法:
用两个for循环,外循环是要求的范围,内循环是从2到sqrt(外循环范围中的一个值+1);设置一个flag,来表明是否是素数;
具体实现:
#include <stdio.h>
#include <math.h>
int main (void)
{
int i, j;
bool flag = 0; //设立标志位,0表示非素数,1表示素数;
for(i = 101 ; i <= 200 ; i++) //求101~200的素数,并且打印出来;
{
for(j = 2 ; j <= sqrt((double)(i+1)) ; j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
else
flag = 1;
}
if(flag)
printf("%d ", i);
}
return 0;
}
2. 关于水仙花数的算法:
主要是知道水仙花数的概念,然后分离出个位,十位和百位即可;
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
具体实现:
#include <stdio.h>
int main (void)
{
int i;
int baiwei, shiwei, gewei;
for(i = 100 ; i < 1000 ; i++)
{
int temp = 0;
gewei = i % 10; //分离个位;
shiwei = i / 10 % 10; //分离十位;
baiwei = i / 100; //分离百位;
temp = gewei*gewei*gewei + shiwei*shiwei*shiwei + baiwei*baiwei*baiwei;
if(i == temp)
printf("i = %d\n", i);
}
return 0;
}
3. 关于最大公约数和最小公倍数的算法:
最大公约数要求的是公约数中最大的那个,也就是公约数中最后的那一个;
最小公倍数要求的是公倍数中最小的那个,也就是公倍数中最开始的第一个。
具体实现:
#include <stdio.h>
int main (void)
{
int m, n, i, j;
int gcd, lcm;
printf("please input two integer\n");
scanf("%d %d", &m, &n);
for(i = 1 ; i < (m > n ? m : n) ; i++)
{
if(m % i == 0 && n % i == 0)
gcd = i; //获得最后一个公约数;
}
for(j = (m > n ? m : n) ; j <= m*n ; j++)
{
if(j % m == 0 && j % n == 0)
{
lcm = j;
break; //获得了一个公倍数就立即跳出循环;
}
}
printf("greatest common divisor is %d\n", gcd);
printf("Least Common Multiple is %d\n", lcm);
return 0;
}
4. 关于完数的算法:
定义:完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。
具体实现:
#include <stdio.h>
int main (void)
{
int i, j, r;
for(i = 1 ; i <= 1000 ; i++)
{
r = 0;
for(j = 1 ; j < i ; j++)
{
if(i % j == 0) //这一句是关键;
r = r + j;
}
if(r == i)
printf("perfect number is %d\n", r);
}
return 0;
}
5. 关于回文数的算法:
定义:"回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
算法实现:
#include <stdio.h>
#include <string.h>
int main (void)
{
char str[100];
char *pa, *pb; //使用指针实现;
printf("please input a string\n");
while(scanf("%s", str) != EOF)
{
pa = str; //指向第一个字符;
pb = str + strlen(str) - 1; //指向最后一个不是(\0)字符;
while(*pa == *pb && pa < pb)
{
pa++;
pb--;
}
if(pa >= pb) //是回文数;
printf("true\n");
else
printf("false\n");
}
return 0;
}
6. 关于质数的算法:
定义:质数就是只能够被1和自身整除的数字,比如2,3,5,7,11......
算法实现:
#include <stdio.h>
int main (void)
{
int i, j;
bool flag = true; //设置标志位,默认为真;
for(i = 2 ; i <= 100 ; i++)
{
for(j = 2 ; j < i ; j++)
{
if(i%j != 0)
{
flag = true; //假如不能够被整除,则设置标志位为真;
}
else
{
flag = false; //假如可以被整除,则设置标志位为假,同时退出循环;
break;
}
}
if(flag == true) //标志位真时打印出数字;
printf("%d ", i);
}
return 0;
}
- C语言实现素数,最小公倍数,最大公约数,回文数,质数,完数,水仙花数算法
- 完数/最大公约数/最小公倍数/素数/回文数
- C语言实现判断素数,回文数,水仙花数,闰年
- C语言 特殊数问题 回文数 素数 亲密数 水仙花数
- 【C语言】水仙花数,素数
- 水仙花数&素数&质因数分解的C语言实现
- c语言算法-回文数
- c语言:水仙花数
- C语言--水仙花数
- C语言 水仙花数
- C算法-水仙花数
- 特殊数求解(最大公约数/最小公倍数/素数)
- c语言 经单水仙花数算法
- 蓝桥杯-C语言 算法训练 水仙花数
- 用C语言求两个数的最大公约数和最小公倍数
- C语言如何求两个数的最大公约数和最小公倍数。
- C语言解决“两个数的最大公约数和最小公倍数问题”
- c语言:求两个数的最大公约数和最小公倍数
- poj 1887 Testing the CATCHER(最长递增子序列)
- java学习笔记(三十五)
- XP安装VS2010后网卡启动慢的解法
- Linux(Ubuntu10.04)下搭建GTK(GNOME)开发环境
- Qt 学习笔记之一 —— Qt SDK 的下载安装与配置
- C语言实现素数,最小公倍数,最大公约数,回文数,质数,完数,水仙花数算法
- Android[初级教程]第十三章 ProgressDialog控件
- 关于看雪上那份inline hook代码的小问题
- (2011.10.02)《C++ Primer》第五部分学习笔记汇总——高级主题
- (2012.01.05)《C++ Primer》全书第一轮学习笔记汇总
- 第三章 操作系统
- 学习简单工厂类
- 进程通信--IPC
- c语言的一些总结和探讨(未完待续中).