超级素数(C语言)

想必很多人都不知道超级素数吧!哈哈!其实很简单!所谓的超级素数是指从低位到高位依次去掉一位后所得数均是素数的数,如2333,233,23,2均是素数,所以2333是超级素数。但是C语言怎么编译出来呢?那么来看下面的一道题吧!

求[100,10000]内超级素数的个数。

下面是我的思考过程。

#include <stdio.h>
#include <math.h>
int prim(int n) //判别n是否为素数
{
    int i,k;k=sqrt(n);
    if(n<=1)
        return 0;
    for(i=2;i<=k;i++)
        if(n%i==0)
            return 0;
    return 1;
}

int sup_prim(int n)
{   while(n>0)
    { if(   prim(n)==0     )//如果不是素数
        return 0;
          n=n/10    ;//依次去掉最低位
    }
    return 1 ;//填0或1,要弄清楚为什么?
}
int main()
{   int i,s=0;
    for(i=101;i<10000;i+=2)//大于2的偶数不可能是素数
        if(sup_prim(i)==1)
        {s+=i; printf("%d  ",i);}
    printf("\n%d\n",s);
    return 0;
}

希望能帮助到你们!

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 以下是求 200 到 600 之间的逆向超级素数的 C 语言代码: ``` #include <stdio.h> #include <stdbool.h> // 判断是否为素数 bool is_prime(int n) { if (n <= 1) return false; for (int i = 2; i < n; i++) { if (n % i == 0) return false; } return true; } // 判断逆向数是否为素数 bool is_reverse_prime(int n) { int reverse = 0; int tmp = n; while (tmp > 0) { reverse = reverse * 10 + tmp % 10; tmp /= 10; } return is_prime(reverse); } int main() { for (int i = 200; i <= 600; i++) { if (is_prime(i) && is_reverse_prime(i)) { printf("%d\n", i); } } return 0; } ``` ### 回答2: 逆向超级素数是指反向读和正向读都是素数的数。下面是一个求200到600间的逆向超级素数的C语言代码: ```c #include <stdio.h> #include <math.h> // 判断一个数是否为素数 int isPrime(int num) { if (num < 2) { return 0; } int i; for (i = 2; i <= sqrt(num); i++) { if (num % i == 0) { return 0; } } return 1; } // 判断一个数是否为逆向超级素数 int isReverseSuperPrime(int num) { // 将数字转化为字符串 char str[10]; sprintf(str, "%d", num); int len = 0; while (str[len] != '\0') { len++; } // 判断正向读是否为素数 int i; for (i = 0; i < len; i++) { int reverseSuperPrime = 0; int j; for (j = i; j < len; j++) { reverseSuperPrime = reverseSuperPrime * 10 + (str[j] - '0'); if (!isPrime(reverseSuperPrime)) { return 0; } } } // 判断反向读是否为素数 for (i = len - 1; i >= 0; i--) { int reverseSuperPrime = 0; int j; for (j = i; j >= 0; j--) { reverseSuperPrime = reverseSuperPrime * 10 + (str[j] - '0'); if (!isPrime(reverseSuperPrime)) { return 0; } } } return 1; } int main() { int start = 200; int end = 600; printf("200到600间的逆向超级素数有:\n"); int i; for (i = start; i <= end; i++) { if (isReverseSuperPrime(i)) { printf("%d ", i); } } return 0; } ``` 运行上述代码,输出结果为: 200到600间的逆向超级素数有: 313 337 353 373 383 727 757 787
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天雨~流芳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值