文章目录

  • 素数(质数)
    • 孪生素数
    • 哥德巴赫猜想
  • 回文数
  • 其它特殊数
    • 水仙花数
    • 完数
    • 勾股数
    • 最大公约数和最小公倍数
    • 某数+100和再加168均为完全平方数,求此数
    • 将一个数分解质因数
    • 亲密数
    • 黑洞数

素数(质数)

什么是素数?
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)
判断方法
只要在[2,sqrt(n)]区间存在可以整除n的数,则n为非素数,否则为素数

通用函数(IsPrime)记下来

int IsPrime(int n)
{if (n <= 1)return 0;int isprime = 1;for (int i = 2; i <= sqrt(n); i++){if (n%i == 0){isprime = 0;break;}}return isprime;
}

孪生素数

孪生素数就是指相差2的素数对,例如3和5,5和7,11和13

void TwinPrime(int start, int end)//输入求孪生素数的范围
{int i, j, count = 0;//count用来计数孪生素数的对数for (i = start; i <= end; i++){if (IsPrime(i)){if ((i + 2 <= end) && IsPrime(i + 2)){count++;printf("第%d对孪生素数:%d和%d\n", count, i, i + 2);} }}
}

哥德巴赫猜想

哥德巴赫猜想就是任意一个不小于4的正偶数都可以分解为两个素数之和,下面代码是验证哥德巴赫猜想对n以内的正偶数成立

int GeDe(int n)//求的是[4,n]范围内所有偶数由哪两个素数分解而成
{int count = 0;int flag = 0;int i, j;for (i = 4; i <=n; i++){if (i % 2 == 0)//确定要判断的数为偶数{count++;for (j = 2; j <= i/2; j++)//只需要判断一半即可{if (IsPrime(j) && IsPrime(i - j)){flag = 1;break;}if (j != 2)j++;//跳过偶数,除2以外偶数肯定不为素数,加快效率}if (!flag)return 0;else{printf("第%d个偶数%d可以分解为%d和%d两个素数:\n", count, i, j, i - j);flag = 0;}}}return 1;
}
int main()//功能是用户输入一个数返回一次结果
{int IsPrime(int);int n, i, ok;while (scanf("%d", &n) != 0)//scanf返回值为成功读取的数据的个数{ok = 0;//位置别放错for (i = 2; i <= n / 2; i++)//因为还要满足两数之和为原数,所以只需判断一半即可{if (IsPrime(i) && IsPrime(n - i)){ok = 1;printf("%d由%d和%d构成:\n", n, i, n - i);}if (i != 2)//跳过偶数,除2以外偶数肯定不为素数,加快效率i++;if (ok)break;}}
}

回文数

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数,有时题目也这样说打印所有不超过n(n<256)的其平方具有对称性质的数。
回文数

//判断某数是否为回文数
int huiwen(int n)
{int a[maxsize];int i = 0, sum = 0, k = 1,m=n;//将n的每一位放入数组,从个位开始while (m!=0){a[i++] = m % 10;m = m / 10;}for (int j = 0; j<i; j++)sum = sum*10 + a[j];//仔细记住这个办法,你曾经苦恼过好久if (sum == n)return 1;elsereturn 0;
}

回文字符串

//判断某一个字符串是否为回文字符串
int huiwenstr(char str[], int length)
{int i, j, flag = 1;for (i = 0, j = length - 1; i < j; i++, j--){if (str[i] != str[j]){flag = 0;break;}}return flag;
}

其它特殊数

水仙花数

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身

//判断某一个数是否为水仙花数
int WaterFlower(int n)
{int sum = 0;int num;int m = n;while (m != 0){num = m % 10;//每次取出最右边那一位sum = sum + num*num*num;m = m / 10;}if (sum == n)return 1;elsereturn 0;
}

完数

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。

//判断某一个数是否为完数
int completenum(int n)
{int sum = 0;for (int i = 1; i < n; i++){if (n%i == 0)sum = sum + i;}if (sum == n)return 1;elsereturn 0;
}

勾股数

勾股数,又名毕氏三元数 。勾股数就是可以构成一个直角三角形三边的一组正整数。勾股定理:直角三角形两条直角边a、b的平方和等于斜边c的平方(a²+b²=c²),最短边为勾,较短边为股,最长边为弦,俗称勾三股四弦五

//求100以内的勾股数
void gougu()
{int c;int count = 0;for (int a = 1; a < 100; a++){for (int b = a+1; b < 100; b++)//保证不重复{c = (int)sqrt(a*a+b*b);//若c不为弦则它经过强制类型转换后的值参与下面的判断条件一定不成立if ((a*a + b * b == c * c) && (a + b > c) && (b + c > a) && (a + c > b) && c <= 100)//满足任意两边之和大于第三边{count++;printf("第%d组勾股数为%d,%d,%d\n", count, a, b, c);}}}
}

最大公约数和最小公倍数

最大公约数:辗转相除法直至除数为0,应注意不能对0求余,例如3%0
最小公倍数:等于两数乘积除以最大公约数

int gcd(int a, int b)//返回值为最大公约数
{int c = 0;while (a%b != 0){c = a % b;a = b;b = c;}return c;
}

某数+100和再加168均为完全平方数,求此数

int square()
{long int i;for (i=1; i < 100000;i++)//注意sqrt函数参数和返回值均为double型{int x = sqrt(i + 100);int y=  sqrt(i + 268);if (x*x == i + 100 && y*y == i+ 268)return i;}return -1;
}

将一个数分解质因数

把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。
分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数 i 除起,若 i 除不尽当前数,则 i++,否则更新被除数,直到被除数与 i 相等时结束,不要忘记将最后一个质因数输出

void division(int n)
{int i;printf("n=");for (i = 2; i <= n; i++){while (i!=n){if (n%i == 0){printf("%d*", i);n = n / i;//改变被除数}elsebreak;}}printf("%d\n", n);//不要忘记把最后一个质因数输出
}

亲密数

如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对

void HoneyElem()
{int sum, sum1;//sum为某数A的因子和,sum1为A的因子和的因子和for (int i = 2; i < 3000; i++){sum = 0, sum1 = 0;for (int j = 1; j < i; j++){if (i%j == 0){sum += j;}}if (sum < 3000){for (int k = 1; k < sum; k++){if (sum%k == 0){sum1 += k;}}}if (sum1 == i&&i<=sum)//使每对亲密数仅输出一次{printf("%d与%d是一对亲密数\n", sum, i);}}
}
//时间复杂度为O(n^2)

黑洞数

黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。

void BlackHole()//核心函数
{int num, prenum;char str[10];printf("请输入一个3位以上(含3位)的数(各位之间不完全相同):\n");gets_s(str, 10);int max(char[]);int min(char[]);void convert(int,char[]);int a1 = max(str);int a2 = min(str);num = a1 - a2;while (1){prenum = num;//保存第一次的差值char str1[10];convert(num, str1);a1 = max(str1);a2 = min(str1);num = a1 - a2;//保存第二次差值if (prenum == num)break;}printf("%s的黑洞数为%d\n", str, prenum);
}
void convert(int num,char str[])//数字转字符串函数
{int i = 0;char ch;while (num % 10 != 0||num!=0)//对3087这一类数的特殊处理{str[i] = (num % 10)+'0';//注意这里的写法i++;num /= 10;}for (int j = 0, k = i - 1; j < k; j++, k--)//将其逆置后才为原数{ch = str[j];str[j] = str[k];str[k] = ch;}str[i] = '\0';//不要忘记
}
int min(char str[])//求某个数可以组成的最小值
{int length = strlen(str), k = 1, sum = 0;for (int i = 0; i < length; i++){for (int j = i + 1; j < length; j++){if (str[i] > str[j]){int temp;temp = str[i];str[i] = str[j];str[j] = temp;}}}for (int i = length - 1; i >= 0; i--){sum += (str[i] - '0')*k;//不要忘记括号k *= 10;}return sum;
}int max(char str[])//求某个数可以组成的最大值
{int length = strlen(str), k = 1, sum = 0;for (int i = 0; i < length; i++){for (int j = i + 1; j < length; j++){if (str[i] < str[j]){int temp;temp = str[i];str[i] = str[j];str[j] = temp;}}}for (int i = length - 1; i >= 0; i--){sum += (str[i] - '0')*k;k *= 10;}return sum;
}

一些花里胡哨的数的编程问题相关推荐

  1. Java-函数式编程(二)Lambda表达式

    本文首发: Java-函数式编程(二)Lambda表达式 "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直 ...

  2. 数控g71编程实例带图_数车编程G71实例讲解

    老铁们大家好,我是你们的好朋友少白,最近找我学习数车编程的老铁们有点多,今天呢我就给大家来分享一组案例,希望能给大家带来一些帮助, G71,G70 编程指令是数控车最常用,也是最方便的指令,一般零件的 ...

  3. [Google Guava] 4-函数式编程

    原文链接 译文链接 译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果.预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提 ...

  4. Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开

    6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...

  5. python实现一个数如果恰好等于它的因子之和,这个数就称为“完数” 。例如, 6的因子为 1、2、3,而 6=1+2+3,因此 6 是完数。编程找出1000之内的所有完数

    一个数如果恰好等于它的因子之和,这个数就称为"完数" . 例如, 6 的因子为 1.2.3,同时6=1+2+3,因此 6 是完数. 编程找出 1000 之内的所有完数,并输出该完数 ...

  6. 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数。

    如果一个数等于它的因子之和,则称该数为"完数"(或"完全数").例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数".编程找出10 ...

  7. C语言程序设计——函数 梅森尼数形如2^i-1的素数,称为梅森尼数。编程计算并输出指数i在[2,n]中的所有梅森尼数,并统计这些梅森尼数的个数,其中n的值由键盘输入,并且n的值不能大于50。

    梅森尼数 形如2^i-1的素数,称为梅森尼数.编程计算并输出指数i在[2,n]中的所有梅森尼数,并统计这些梅森尼数的个数,其中n的值由键盘输入,并且n的值不能大于50.其中,2^i表示2的i次方,请不 ...

  8. Python-函数式编程模块itertools、functools、operator

    目录 上篇文章思考题 itertools 无穷迭代器 count 计数 cycle 循环 repeat 重复 排列组合迭代器 product 笛卡儿积 permutations 排列 combinat ...

  9. python-函数式编程

    # 高阶函数: 变量可以指向函数-> 函数名也是变量:把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. # *args 和 **kw # *args是可变参数 ...

  10. 函数式编程语言python-函数式编程初探

    诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注. 不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang.clojur ...

最新文章

  1. Virtual Box+Centos7.0+Kaldi安装
  2. Mac OS X Terminal 101:终端使用初级教程
  3. 收藏 | 数据分析师最常用的10个机器学习算法!
  4. android:textAppearance设置文字外观
  5. hdu2609 How many
  6. java 数据库语句_java连接各数据库的语句
  7. 常州新北区华为云_常州高新区召开大数据时代健康产业创新大会
  8. git语法大全(值得收藏)
  9. 【关于油猴的安装和使用的教程】
  10. mac hdmi 不能调整音量_iVolume for mac(Mac音量管理软件)
  11. android/iphone/windows/linux声波通讯库
  12. c语言大学程序设计题库,大连理工大学c语言...程序设计题库.doc
  13. UVA11134_Fabled Rooks
  14. 大学计算机基础 教学要求,《大学计算机基础》课程教学大纲
  15. Apollo星火计划学习笔记——Control 专项讲解(LQR)
  16. GIS大讨论(十):GIS专业就业之职业态度
  17. php laravel 教程,Laravel 入门到精通教程
  18. QEMU System环境
  19. 红色企业通用年终总结PPT模板
  20. 实习报告二-关于工程

热门文章

  1. Exchange2010启用反垃圾邮件功能
  2. 威联通NAS网络存储器快速安装指南——从零搭建一个文件存储平台
  3. TypeError: Image data of dtype object cannot be converted to float
  4. windows mingw 64,SDL ,devil,glfw,opengl,qt环境搭建
  5. 谷歌李开复 我的传奇人生源于十句箴言
  6. 草蛋的Android studio 居然让我搞了好几天 真是智障啊non-zero exit value 2
  7. 转载 提高github下载速度的方法【100%有效】可达到2MB/s
  8. 软件工程之美学习笔记二十五 24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
  9. 【图片新闻】俄罗斯的新型高超音速导弹每秒飞行近两英里,“锆石Zircon”很可能是不可阻挡的尖端防空武器
  10. 杭州马开始坐不住,深圳腾窃喜,小龙信为何露出淫淫的笑容