PTA 7-178 吸血鬼素数

分数 10
作者 林生佑
单位 浙江传媒学院

1994年,美国数学家皮科夫在一篇文章中首次提出了吸血鬼数。如果一个2n(n是自然数)位的自然数等于自己各个数字任意组成的两个n位数的乘积,那么这个自然数就叫吸血鬼数。其中这两个n位数都被称为獠牙或尖牙。比如1260=21×60,所以1260是一个吸血鬼数。注意两个尖牙的个位数不能同时为0,例如虽然126000=210×600,但126000却不是吸血鬼数。在此基础上,2002年,数学家里维拉定义了吸血鬼素数。如果吸血鬼数的两个尖牙都是素数,则这两个尖牙都叫吸血鬼素数。例如,117067=167×701,而167和701都是素数,所以167和701都是3位吸血鬼素数。

输入一个正整数n(小于1000),请判断它是否吸血鬼素数。如果是,打印YES,否则打印NO。

输入格式:
一个小于1000的正整数n

输出格式:
YES或者NO

输入样例:

701

输出样例:

YES

代码长度限制
16 KB
C (gcc)
时间限制
400 ms
内存限制
64 MB
其他编译器
时间限制
400 ms
内存限制
64 MB

#include <stdio.h>int ss(int x); //判断是不是素数
int weishu(int x); //计算有多少位 int main(void)
{int n,m;int nm[10],is[10];int h,max_h;int i,j;int z;scanf("%d",&n);if(ss(n) == 1){h = weishu(n);max_h = (int)pow(10,2*h);
//      printf("h = %d\n",h);
//      printf("i = %d\n",(int)pow(10,2*h-1));
//      printf("max_h = %d\n",max_h);for(i = (int)pow(10,2*h-1);i < max_h;i++){if(i%n == 0){m = i/n;if(weishu(m) == h && ss(m) == 1){ //位数相同,都是素数 //printf("%d %d %d\n",i,n,m);for(j = 0;j < 10;j++){nm[j] = 0;is[j] = 0;}while(m > 0){nm[m%10]++;m /= 10;}m = n;while(m > 0){nm[m%10]++;m /= 10;}m = i;while(m > 0){is[m%10]++;m /= 10;}z = 1;for(j = 0;j < 10;j++){if(nm[j] != is[j]){z = 0;break;}}if(z == 1){printf("YES");break;}}}}if(z == 0){printf("NO");}}else {printf("NO");}return 0;
}int ss(int x){int z = 1;int i;if(x == 2){z = 1;}else if(x > 2){if(x%2 == 0){z = 0;}for(i = 3;i <= sqrt(x) && z == 1;i += 2){if(x%i == 0){z = 0;break;}}}else {z = 0;}return z;
}int weishu(int x){int z = 0;if(x != 0){while(x != 0){z++;x /= 10;}}else {z = 1;}return z;
}/*
思路:
训练的时候遇到了这题,因为这题的输出只有"YES"和"NO",我直接无脑输出"YES"骗了一点分。‍_(:з」∠)_‍正常的解法是:
设:i = n*m ,i是吸血鬼数,n是输入的数先判断n是不是素数,如果不是素数就不可能是吸血鬼素数,直接输出"NO",结束程序。如果是素数,则算出n的位数h,根据h得出吸血鬼数i的位数为2h,范围为102h-1 <= i < 102h,如:n = 701,h = 3,2h = 6,105 <= i < 106,100000 <= i < 1000000。求出m当且仅当i%n == 0。求出的m也应该是吸血鬼素数,所以还要判断m的位数是否也是h,m是否也是素数。因为吸血鬼数i等于自己各个数字任意组成的两个n位数的乘积,所以i各个数字出现的次数等于n和m各个数字出现的次数之和。
可以建立两个数组(变量名称是个人习惯)int is[10],nm[10];全部元素初始化为0,分别用来记录i各个数字出现的次数和n和m各个数字出现的次数之和,如果完全相同,就说明n和m是吸血鬼素数。如果i一直到102h都没找到对应的m,则n不是吸血鬼素数。
*/

PTA 7-178 吸血鬼素数相关推荐

  1. 吸血鬼素数 C/C++

    吸血鬼素数 1994年,美国数学家皮科夫在一篇文章中首次提出了吸血鬼数.如果一个2n(n是自然数)位的自然数等于自己各个数字任意组成的两个n位数的乘积,那么这个自然数就叫吸血鬼数.其中这两个n位数都被 ...

  2. 7-57 吸血鬼素数测试增强版 (15 分)

    7-57 吸血鬼素数测试增强版 (15 分) 吸血鬼素数是指这样的数:如果两个相同位数的素数,其乘积的组成数字正好与这两个素数的组成数字相同,那么这两个素数都被称为吸血鬼素数,例如,117067=16 ...

  3. C++学习之路 | PTA乙级—— 1013 数素数 (20分)(精简)

    1013 数素数 (20分) 令 P ​i ​​ 表示第 i 个素数.现任给两个正整数 M≤N≤10 ​4 ​​ ,请输出 P ​M ​​ 到 P ​N ​​ 的所有素数. 输入格式: 输入在一行中给 ...

  4. 牛客网 PTA乙级真题 1003 数素数

    数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数.现任给两个正整数M &l ...

  5. pta函数统计素数并求和_黎曼的zeta函数

    9月24日阿提亚爵士(Sir Atiyah)直播"证明"黎曼猜想(Riemann hypothesis)在普通人中引发了一轮数学热潮,网络上一时间涌现了很多数学八卦文章.许多人在论 ...

  6. 素数c分解语言程序,PTA|《C语言程序设计实验与习题指导(第3版)》实验4-2-3 验证“哥德巴赫猜想” (20分)...

    题目 数学领域著名的"哥德巴赫猜想"的大致意思是:任何一个大于2的偶数总能表示为两个素数之和.比如:24=5+19,其中5和19都是素数.本实验的任务是设计一个程序,验证20亿以内 ...

  7. PTA求100以内的素数

    7-3 求100以内的素数 (15 分) 求100以内的全部素数,每行输出10个.素数就是只能被1和自身整除的正整数,1不是素数,2是素数.要求定义和调用函数prime(m)判断m是否为素数,当m为素 ...

  8. Python PTA实验课 求小于某一大于2的自然数的所有素数

    求小于某一大于2的自然数的所有素数 输入一个大于2的自然数,输出小于该自然数的所有素数组成的列表 输入格式: 一个大于2的自然数 输出格式: 如果输入自然数大于2,则输出小于该自然数的所有素数组成的列 ...

  9. PTA 钻石真题卷——均是素数

    文章目录 一.简单分析一下这个题目 二.代码 一.简单分析一下这个题目 1.区间给定,寻找素数满足条件 2.先找区间内素数 3.再对符合要求的素数进行查找扫一遍就好 二.代码 // #include& ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
  2. 双柱状图柱子数量比较多_微生物组数据冲击图和柱状图一条代码解决
  3. DCMTK:类OFList和OFListIterator的测试程序
  4. linux可疑程序,linux可疑程序追踪
  5. C++一天一个程序(四)
  6. Flyweight Design Pattern 共享元设计模式
  7. ci mysql 转义,CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
  8. 测量怎么显示坐标_全站仪坐标放样究竟如何操作?
  9. 莫烦python简历_Matplotlib画图教程
  10. java添加锁_java – 如何在这种情况下添加锁?
  11. 大数据_MapperReduce_Hbase的优化_高可用 预分区_防止数据倾斜_JAVAAPI创建预分区---Hbase工作笔记0026
  12. 【图像隐写】基于matlab GUI DWT+DCT+PBFO改进图像水印隐藏提取【含Matlab源码 081期】
  13. kt条件例题运筹学_运筹学讲解习题
  14. gp 导出数据字典_gp数据库查看数据编码
  15. 微星GT60笔记本升级1060显卡案例
  16. easyui radiobutton
  17. 小米6无线显示无法连接服务器,小米手机:无法连接WiFi怎么解决?
  18. matlab求解线性规划问题的实例代码,用matlab求解线性规划问题.doc
  19. MBA都包括哪些课程?有哪些MBA专业书籍值得推荐?
  20. 每日简报 5月16日简报新鲜事 每天一分钟 了解新鲜事

热门文章

  1. markdown 做图 : Mermaid语法
  2. 达梦数据库的替代(instead of )触发器使用一例
  3. Akm函数递归与非递归解法
  4. 如何更换荣耀MagicBook Pro开机启动logo
  5. GPU会变得更便宜吗?GPU 定价更新
  6. Ubuntu打开WPS ofifice卡顿、无法进行编辑操作解决办法
  7. 后羿 05 ‖ 九婴
  8. WiFi共享精灵文件传输新功能:金币话费领不停
  9. Python杀死了Excel
  10. 【人工智能 AI】什么是人工智能? What is Artificial Intelligence