• C语言每日一题(19)回文素数


    牛客网 BC157 回文素数

    题目描述

    描述

    现在给出一个素数,这个素数满足两点:

    1、  只由1-9组成,并且每个数只出现一次,如13,23,1289。

    2、  位数从高到低为递减或递增,如2459,87631。

    请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。

    输入描述:

    输入只有1行。

    第1行输入一个整数t,保证t为素数。

    数据保证:9

    输出描述:

    输出一行字符串,如果t的回文数仍是素数,则输出“prime”,否则输出"noprime"。

    思路分析

    定义两个函数用来求回文数和判断素数

    回文函数:

    举个例子:

    123的回文数是12321,可以看成,1232=123*10+((123/10)%10);

    12321=1232*10+((12/10)%10);

    而循环的次数是n的单位个数-1.

    素数函数:

    从2遍历到n的平方根,如果存在n%i==0就不是素数,反之则是。

    步骤流程

    1定义所输入数n(用long long定义),定义两个函数back(求回文数)和is_prime(判断素数)

    back:

    定义变量b存入n的值,并循环b求n的单位个数,每次循环,b=b/10,计数器a+1。

    特殊情况:当a=1时,直接返回即可

    以a>1为循环条件,用一个变量d保存n的值

    每次循环:d=d*10+(n/10)%10

    n=n/10

    最后返回d。

    is_prime:

    从2遍历到n的平方根,如果有n%i==0存在就返回0(不是素数),循环完后最后返回1。

    完整代码

    1. #include <stdio.h>
    2. #include<math.h>
    3. long long back(long long n)
    4. {
    5. int a=0;
    6. long long b=n;
    7. while(b)
    8. {
    9. b=b/10;
    10. a++;
    11. }
    12. long long d=n;
    13. while(a>1) //a=1时直接返回d
    14. {
    15. d=d*10+((n/10)%10);
    16. n/=10;
    17. a--;
    18. }
    19. return d;
    20. }
    21. int is_prime(long long n)
    22. {
    23. for(int i=2;i<=sqrt(n);i++) //sqrt函数返回变量的平方根
    24. {
    25. if(n%i==0)
    26. {
    27. return 0;
    28. }
    29. }
    30. return 1;
    31. }
    32. int main() {
    33. long long n=0;
    34. scanf("%lld",&n);
    35. long long c=back(n);
    36. int q=is_prime(c);
    37. if(q==1)
    38. {
    39. printf("prime\n");
    40. }
    41. else {
    42. printf("noprime\n");
    43. }
    44. return 0;
    45. }

  • 相关阅读:
    IOC操作Bean管理(基于注解方式)
    PostgreSQL数据库统计信息——analyze执行函数
    复习集合Collection、自定义数组、链表源码分析和实现
    释放数据生产力,数据治理要“即时”
    Flask之路由(app.route)详解
    JVM coredump
    代码随想录训练营第六十天| 84.柱状图中最大的矩形
    Git之路
    (标签-微信小程序)
    ubuntu cv2.imshow显示图片问题
  • 原文地址:https://blog.csdn.net/wcl312/article/details/134041575