有关C++纯素数问题……本人一菜鸟,急求高手指点

纯素数问题:纯素数是满足如下条件的素数:依次去掉最高位,剩下的仍是一个素数。例如:2053、3137都是4位纯素数。要求按照从小到大的顺序,依次输出所有的4位纯素数。每个4位纯素数输出一行。
我的代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,i,b,c;
for(i=1000;i<=9999;i++)
{
for(a=2;a<=i;a++)
if(i%a==0)break;
if(i==a)
{
b=i/10;
for(c=2;c<=b;c++)
if(b%c==0)break;
if(b==c)
cout<<i<<endl;
}
}
return 0;
}
哪里有错误

for(a=2;a<=i;a++)
if(i%a==0)break;
if(i==a)
{
b=i/10;
for(c=2;c<=b;c++)
if(b%c==0)break;
if(b==c)
cout<<i<<endl;
里面有问题首先内循环只要<sqrt(i)就可以了,然后i/10并不等于去了千位。按照题目意思那么十位呢?用for循环的时候不管语句多少最好加大括号以免出现不必要的错误~
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-03
#include<iostream>
#include<cmath>
using namespace std;
int main(int argc,char* argv)
{
int a,i,b;
for(i=1000;i<=9999;i++)
{
for(a=2;a<sqrt(i);a++) //当a 大于 i 的平方根时,都不用在做循环。这样可以优化运行速度。
{
if(i%a==0)
break;
}
if(a>=sqrt(i))
{
b=i;
while(b)
{
cout<<b%10<<" ";
b=b/10;
}
cout<<endl;
}
}
return 0;
}
第2个回答  2010-12-03
判断一个数如100是不是素数是用2到(100-1)这些数去除它,假如都除不到就是素数
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,i,b,c;
for(i=1000;i<=9999;i++)
{
for(a=2;a<=i;a++) //你这里有问题应该是for(a=2;a<i;a++)
if(i%a==0)break;
if(i==a)
{
b=i/10;
for(c=2;c<=b;c++) //这里也一样for(c=2;c<b;c++)
if(b%c==0)break;
if(b==c)
cout<<i<<endl;
}
}
return 0;
}本回答被提问者和网友采纳