C++帮我看一下 哪儿出问题啦?帮我改改,谢谢一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 12:05:12

C++帮我看一下 哪儿出问题啦?帮我改改,谢谢一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超
C++帮我看一下 哪儿出问题啦?帮我改改,谢谢
一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数.例如,617,17,7都是素数,因此617是逆向超级素数,但尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零.试求[100,999]之间的所有逆向超级素数从小到大数的素数个数是多少?,并输出这些逆向超级素数?
#include
#include
main()
{ int i,n=0,j,a,b,c,d;
{ for(i=100;i

C++帮我看一下 哪儿出问题啦?帮我改改,谢谢一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超
#include<stdio.h>
#include<math.h>
main()

    int i,n=0,j,a,b,c,d;
    for(i=100;i<=999;i++)
    {
        for(j=2;j<=sqrt(i);j++)
            if(i%j==0) break;
        if(j>sqrt(i))
        {
            a=i%100;
            b=i/10%10;
            c=i%10;
            if(b!=0)        // <---加一个判断,把十位含0的数去掉
            {
                d=b*10+c;
                for(j=2;j<=sqrt(d);j++)  // <--sqrt(i)改成sqrt(d)
                    if(d%j==0) break;
                if(j>sqrt(d))   // <--d>sqrt(i) 改成j>sqrt(d)
                { 
                    for(j=2;j<=sqrt(c);j++)    // <--sqrt(i)改成sqrt(c)
                        if(c%j==0) break;
                    if(j>sqrt(c))   // <-- c>sqrt(i)改成j>sqrt(c)
                    {
                        n++;
                        printf("%d\n",i);
                    }
                 }
            }
        }
    }        
    printf("%d\n",n);
}