C语言问题(回文素数)

//输出10000以内的所有回文素数#include<stdio.h>intmain(){inti=0;intj,k;ints[1000];for(j=1;j<10;j+... //输出10000以内的所有回文素数

#include <stdio.h>

int main()
{
int i=0;
int j,k;
int s[1000];

for(j=1;j<10;j++) //11~99内的回文
{
s[i++]=j*11;
}

for(j=1;j<10;j++) //100~999内的回文
{
for(k=0;k<10;k++)
{
s[i++]=j*101+k*10;
}
}

for(j=1;j<10;j++) //1000~9999内的回文
{
for(k=0;k<10;k++)
{
s[i++]=j*1001+k*110;
}
}

for(j=0;j<i;j++) //判断是否是素数
{
for(k=2;k<(s[j]/2+1);k++)
{
if(s[j]%k==0)
printf("%5d",s[j]);
}
}

return 0;
}

//程序无法运行,请问哪里的错误???
展开
 我来答
走马看飞腾0954
推荐于2018-02-28 · TA获得超过445个赞
知道小有建树答主
回答量:319
采纳率:100%
帮助的人:257万
展开全部

#include<stdio.h>

#include<math.h>

#define M 10000

void main()

{

int i,a,b,c,d,j,r;

for(i=11;i<=M-1;i++)

{

for(j=2;j<=sqrt(i);j++)

{

 r=i%j;

 if(r==0)

 break;

}

  if(r!=0)

  {

     if(i<=99)

{

   a=i%10;

b=i/10;

if(a==b)

printf("%4d是回文数\n",i);

}else if(i<=999)

{

   a=i/100;

b=(i%100)%10;

if(a==b)

printf("%4d是回文数\n",i);

}else 

{

   a=i/1000;

b=(i%1000)/100;

c=((i/10)%100)%10;

d=(((i%1000)%100)%10);

if(a==d&&b==c)

printf("%4d是回文数\n",i);

}

  }

}


}

自己编的一个,你看看。。

   改了哈,这是正确的了,呵呵

米湖耳刀
2013-12-27
知道答主
回答量:33
采纳率:0%
帮助的人:13.1万
展开全部

你自己看看吧,你最后一个for是只要是和数就输出。

程序中的flag是标记的意思,flag=0,此数为质数,否则是和数。

还有,一个数在sqrt(可以表示为k*k<=s[j])内都没有因子,那么它一定是质数

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰火梦幻
2013-12-27 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:424万
展开全部
// 最后一个for,整除表示“是合数”。改成下面这样
for(j=0;j<i;j++)     //判断是否是素数
{
for(k=2;k<(s[j]/2+1);k++)
{
if(s[j]%k==0)
break;
}
if (k == s[j]/2 + 1)
    printf("%5d",s[j]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
推荐于2016-03-12 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6588万
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
bool prime(int n){
int i;
if(n<2) return false;
if(n==2 || n==3) return true;
if(!(n%2)) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}

bool palindrome(int n){
char a[5]="",b[5]="";
itoa(n,a,10);
if(!strcmp(a,strrev(strcpy(b,a))))
return true;
return false;
}
void main(void){
int i,ln;
printf("%5d",2);
for(ln=1,i=3;i<10000;i+=2)
if(prime(i) && palindrome(i))
printf(++ln%5 ? "%5d" : "%5d\n",i);
printf("\n");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式