扶摇万仞
2016-03-26 11:39
采纳率: 62.5%
浏览 4.1k
已采纳

初学者,C语言问题,100-999绝对素数(幻影素数)的问题

绝对素数:例如107和701都是素数,而且他们相反,所以他们是绝对素数。
我会求素数,但是不会求绝对素数,希望大神们能给予帮助啊,不甚感激,希望能在我的代码上补充就好了

 #include<stdio.h>
int main()
{
    int i,k,flag=1;
    for(i=100;i<=999;i++)
    {
        flag=1;//   notice
        for(k=2;k<i;k++)
        {
            if(i%k==0)
            {
                flag=0;
            }

        }
        if((flag==1)&&(i!=1))
        {
            printf("%d  ",i);

        }


    }

}


  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 智者知已应修善业 2016-03-26 12:49
    已采纳
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 小灸舞 2016-03-26 12:09

    加了一个生成相反的数的一个函数

     #include<stdio.h>
    #include<iostream>
    using namespace std;
    int reverse( int num )
    {
        int temp, target;
        temp = num;
        target = 0;
        while( temp )
        {
            target = target*10 + temp % 10;
            temp /= 10;
        }
        return target;
    }
    int main()
    {
        int i,k,flag=1;
        for(i=100;i<=999;i++)
        {
            flag=1;//   notice
            for(k=2;k<i;k++)
            {
                int i_reverse = reverse(i);//得到相反的数
                if(i%k==0||i_reverse%k==0)//同时判断是否能整除
                {
                    flag=0;
                }
            }
            if((flag==1)&&(i!=1))
            {
                printf("%d  ",i);
            }
        }
        printf("\n");
    }
    

    图片说明

    评论
    解决 1 无用
    打赏 举报
  • lx624909677 2016-03-27 15:43
    #include<stdio.h>
    #include <math.h>
    
    #define SWAP(a, b, t) t = (a), (a) = (b), (b) = (t);  // 交换两个数的位置
    
    int foo1(int m);          // 计算素数  , 是返回1, 否返回0
    int foo2(int m);          // 计算反序数, 是返回1, 否返回0
    
    int main()
    {
        int m, n, x;
        int t;
    
        scanf("%d%d", &m, &n);
        if (m > n)             // 如果第一个数大于第二个数,就交换位置 没有做<1000的判断, 需要可以加上去.
            SWAP (m, n, t);
    
        for (x = m; x <= n; x++)
            if (foo1(x))       // 1. 计算x是否是素数
                if (foo2(x))   // 2. 计算反序数是否是素数
                printf("%d\n", x);
        return 0;
    }
    
    int foo1(int m)
    {
        int i;
        for (i = 2; i <= sqrt(m); i++)
            if (m % i == 0)
                return 0;
        return 1;
    }
    
    int foo2(int m)
    {
        int x = 0, t = 0;
    
        while(m) {         // 求反序数
            x = m % 10;
            t = t * 10 + x;
            m = m / 10;
        }
        if (foo1(t))      // 计算反序数是否是素数.
            return 1;
        return 0;
    } 
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题