用C++编写:编程输出三位数中所有既是素数又是回文数的数
3个回答
展开全部
//看我的
#include<iostream.h>
#include<math.h>
int isPalindrome(int number);
int isPrime(int number);
void findInArea(int lower,int upper);
int main()
{
findInArea(100,999);
return 0;
}
int isPalindrome(int number)
{
int i,n = int(log10(number))+1,m=number;
unsigned char * point=new unsigned char [n];
for(i=0;i<n;i++,m/=10)point[i]=m%10;
for(i=0;i<n;i++)m=m*10+point[i];
delete [] point;
return m==number;
}
int isPrime(int number)
{
int i,tmp;
if(number<=1)return 0;
if(number==2)return 1;
if(number%2==0)return 0;
tmp = (int)sqrt(number);
for(i=3;i<=tmp;i+=2)if(number%i==0)return 0;
return 1;
}
void findInArea(int lower,int upper)
{
for(int i=lower;i<=upper;i++)if(isPalindrome(i)&&isPrime(i))cout<<i<<endl;
}
#include<iostream.h>
#include<math.h>
int isPalindrome(int number);
int isPrime(int number);
void findInArea(int lower,int upper);
int main()
{
findInArea(100,999);
return 0;
}
int isPalindrome(int number)
{
int i,n = int(log10(number))+1,m=number;
unsigned char * point=new unsigned char [n];
for(i=0;i<n;i++,m/=10)point[i]=m%10;
for(i=0;i<n;i++)m=m*10+point[i];
delete [] point;
return m==number;
}
int isPrime(int number)
{
int i,tmp;
if(number<=1)return 0;
if(number==2)return 1;
if(number%2==0)return 0;
tmp = (int)sqrt(number);
for(i=3;i<=tmp;i+=2)if(number%i==0)return 0;
return 1;
}
void findInArea(int lower,int upper)
{
for(int i=lower;i<=upper;i++)if(isPalindrome(i)&&isPrime(i))cout<<i<<endl;
}
展开全部
#include<stdio.h>
int isPerim(int n) //判断是否是素数,是返回1,不是返回0
{
int i;
if(n==1) return 0;
for(i=2;i<n;i++)
{
if(n%i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i;
int a;
int b;
for(i=100;i<1000;i++)
{
a=i/100;
b=i%10;
if(a==b && isPerim(i))
{
printf(" %d",i);
}
}
getchar();
return 0;
}
int isPerim(int n) //判断是否是素数,是返回1,不是返回0
{
int i;
if(n==1) return 0;
for(i=2;i<n;i++)
{
if(n%i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i;
int a;
int b;
for(i=100;i<1000;i++)
{
a=i/100;
b=i%10;
if(a==b && isPerim(i))
{
printf(" %d",i);
}
}
getchar();
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上和你说的一样,我有代码你看看吧!
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
bool prime(int n);
int palindromes(int n);
int exp_mod(int n,int a,int m);
int main()
{
int i,a,b,wei,t,n,max,x,k;
scanf("%d %d",&a,&b);
printf("5\n7\n11\n");
for(wei=3;wei<10;wei+=2)
{
t=wei/2;
max=(int)pow(10,t);
for(n=(int)pow(10,t-1);n<max;n++)
{
x=palindromes(n);
for(i=0;i<10;i++)
{
k=n*((int)pow(10,t+1))+i*((int)pow(10,t))+x;
if(prime(k))
{
printf("%d\n",k);
}
}
}
}
return 0;
}
bool prime(int n)
{
int m=n-1,j,v,i;
j=0;
if(!(n%2)||!(n%3))
return false;
else if(!(n%5))
{
if(n==5)
return true;
else
return false;
}
else if(!(n%7))
{
if(n==7)
return true;
else
return false;
}
else if(!(n%11))
{
if(n==11)
return true;
else
return false;
}
else if(!(n%13))
{
if(n==13)
return true;
else
return false;
}
else if(!(n%17))
{
if(n==17)
return true;
else
return false;
}
else if(!(n%19))
{
if(n==19)
return true;
else
return false;
}
else if(!(n%23))
{
if(n==23)
return true;
else
return false;
}
else if(!(n%29))
{
if(n==29)
return true;
else
return false;
}
else if(!(n%31))
{
if(n==31)
return true;
else
return false;
}
else if(!(n%37))
{
if(n==37)
return true;
else
return false;
}
v=exp_mod(n,2,m);
if(v==1)
{
return true;
}
for(i=1;i<=j;i++)
{
if(v==n-1)
return true;
v=(v*v)%n;
}
return false;
}
int exp_mod(int n,int a,int m)
{
int i,k=0;
long long int c;
int *b=new int[64];
while(m!=0)
{
b[k++]=m%2;
m/=2;
}
c=1;
for(i=k-1;i>=0;i--)
{
c=(c*c)%n;
if(b[i]==1)
c=(a*c)%n;
}
delete b;
return c;
}
int palindromes(int n)
{
int t=0;
while(n/10)
{
t+=n%10;
t*=10;
n/=10;
}
t+=n;
return t;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询