可逆素数

#include <stdio.h>
#include <math.h>
int main()
{
    int i,count;
    printf("There are invertable primrs with 4 digits:\n");
    for(count=0,i=1001; i<9999; i+=2)
      if(num(i))
        printf(count%9 ? "%3d:%d" : "%3d:%d\n",++count,i);


    return 0;
}
int num(int number)
{
    int j,i;
    if(!ok(number))
    return (0);
    for(i=number,j=0;i>0;i/=10)
        j=j*10+i%10;
    if(number<j)
      if(!ok(j))
      return 0;
      else return 1;
    else return 0;
}
int ok(int number)
{
    int i,j;
    if(number%2==0)
    return 0;
    j=sqrt((double)number)+1;
    for(i=3; i<=j; i+=2)
      if(number%i==0)
    return 0;
    return 1;

}

   [root@localhost 32]# vim invertable.c 
[root@localhost 32]# gcc invertable.c -lm
[root@localhost 32]# ./a.out 
There are invertable primrs with 4 digits:
  1:1009  2:1021  3:1031  4:1033  5:1061  6:1069  7:1091  8:1097  9:1103
 10:1109 11:1151 12:1153 13:1181 14:1193 15:1213 16:1217 17:1223 18:1229
 19:1231 20:1237 21:1249 22:1259 23:1279 24:1283 25:1381 26:1399 27:1409
 28:1429 29:1439 30:1453 31:1471 32:1487 33:1499 34:1523 35:1559 36:1583
 37:1597 38:1619 39:1657 40:1669 41:1723 42:1733 43:1753 44:1789 45:1847
 46:1867 47:1879 48:1913 49:1933 50:1949 51:1979 52:3019 53:3023 54:3049
 55:3067 56:3083 57:3089 58:3109 59:3163 60:3169 61:3257 62:3299 63:3319
 64:3343 65:3347 66:3359 67:3373 68:3389 69:3407 70:3463 71:3467 72:3469
 73:3527 74:3583 75:3697 76:3719 77:3767 78:3889 79:3917 80:3929 81:7027
 82:7057 83:7177 84:7187 85:7219 86:7229 87:7297 88:7349 89:7457 90:7459
 91:7529 92:7577 93:7589 94:7649 95:7687 96:7699 97:7879 98:7949 99:9029            

### Python 实现可逆素数算法 以下是基于引用中的方法实现的一个完整的 Python 程序来解决给定范围内的可逆素数问题: #### 完整代码示例 ```python import math def is_prime(n): # 判断是否为素数 if n <= 1: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True def reverse_number(n): # 颠倒数字顺序 reversed_n = int(str(n)[::-1]) return reversed_n def find_reversible_primes(m, n): # 查找指定区间内的可逆素数 reversible_primes = [] for number in range(max(m, 2), n + 1): # 起始值至少为2,因为小于等于1的不可能是素数 if is_prime(number) and is_prime(reverse_number(number)): reversible_primes.append(number) return reversible_primes # 主程序部分 if __name__ == "__main__": m = int(input()) n = int(input()) result = find_reversible_primes(m, n) if not result: # 如果结果为空 print("no exit") else: print(result) ``` --- #### 关键点解析 1. **素数判定函 `is_prime`** - 使用试除法判断一个是否为素数。 - 对于大于2的偶直接排除[^1]。 - 循环仅需到平方根即可完成所有可能因子的检测。 2. **反转数字 `reverse_number`** - 将数字转换成字符串并利用切片操作[::-1]实现反转[^3]。 - 再将反转后的字符串转回整型以便后续处理。 3. **核心逻辑 `find_reversible_primes`** - 遍历 `[m, n]` 的每一个值,先验证其本身是否为素数。 - 若为素数,则进一步验证其反转后是否仍为素数。 - 符合条件者加入最终的结果列表。 4. **边界情况考虑** - 当输入区间的起点 `m` 小于或等于1时,调整起始值至最小素数2[^5]。 - 如果没有任何符合条件的可逆素数存在,则输出 `"no exit"`。 --- #### 示例运行 ##### 输入样例1 ``` 50 100 ``` ##### 输出样例1 ``` [71, 73, 79, 97] ``` ##### 输入样例2 ``` 200 300 ``` ##### 输出样例2 ``` no exit ``` --- ### 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值