C++(求大神帮助)计算正整数 M 和 N 之间(N 不小于 M)的所有真素数。

计算正整数 M 和 N 之间(N 不小于 M)的所有真素数。
真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为真素数。 例如,11,13 均为真素数,因为11的反序还是为11,13 的反序为 31 也为素数
关于输入
输入两个数 M 和 N,空格间隔,N值不超过 5 位
关于输出
按从小到大输出M 和 N之间(包括 M 和 N )的真素数,逗号间隔。如果之间没有真素数,则输出 No 例子输入
10 35
例子输出
11,13,17,31

#include<iostream>
using namespace std;

bool is_prime(int tar){ //判断是否为prime
int i = 2;
while(i <= sqrt(float(tar))){
if(tar % i == 0)
return false;
i++;
}
return true;
}

int rev_int(int tar){//求逆序数
int res = 0;
while(tar!=0){
res = res * 10 + tar % 10;
tar = tar / 10;
}
return res;
}
int main(){
int M, N;
cin>>M>>N;
bool isfirst = true;
for(int i = M; i < N; i++){
if(is_prime(i) && is_prime(rev_int(i))){
if(!isfirst)
cout<<',';
cout<<i;
isfirst = false;
}
}
printf("\n");
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-08
//#include "stdafx.h"//vc++6.0加上这一行.
#include <iostream>
using namespace std;
bool prime(int n){
int i;
if(n>2 && !(n&1) || n<2) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}
int main(void){
int i,N,M,f;
char a[11];
while(1){
cout << "Type M & N(Positive integer,M<=N)...\n";
cin >> M >> N;
if(N>=M && M>0) break;
cout << "Error, redo: ";
}
for(f=0,i=M;i<=N;i++)
if(prime(i) && prime(atoi(strrev(itoa(i,a,10)))))
cout << (f ? "," : "") << (f=i);
if(!f) cout << "No!";
cout << endl;
return 0;
}本回答被提问者和网友采纳

用C++输出两个正整数[m,n]之间所有的素数,每行输出5个数
i,j,m,n,k,h=0,leap=1;loop:printf("\\nPlease input two numbers m and n:(m>1,n>m)\\n");scanf("%d%d",&m,&n);if(m<=1||n<=m){ printf("Input error!Please input again!");goto loop;} printf("\\The prime numbers between d and d are:\\n",m,n);for(i=m;i<...

c语言输入两个正整数m和n,求出[m,n]区间的所有素数
{ if(i%j==0)break;} if(j==i){ a[x]=i;x++;} 这段代码,你不感觉无论是哪一个数,都会被记录下来,最后输出吗?后面改成if(j!=i)\/\/保证不是因为除以自身而跳出上面寻个循环的 { a[x]=i;x++;}

100以内的素数(用c++语言)
int main(void){ int count,i,m,n,num;printf("请输入所求范围(正整数): ");scanf("%d",&num);count=0;\/\/count记录素数的个数 printf("%d以内的素数为:\\n",num);for(m=2;m<=num;m++){ n=sqrt(m);for(i=2;i<=n;i++){ if(m%i==0)break;} if(i>n)\/\/如果m是素数 ...

c++ 设计程序找出1-1000中的质数并统计个数 求大神
计算1~N之间的素数,并且打印个数和每一行八个,利用普通法计算,没有用筛选法,速度不快 \/ include<stdio.h> include<stdlib.h> include<math.h> define MAX 10000001\/\/设置数组大小号 define N 1000\/\/选择计算的范围 int prime[MAX];int main(){ int i,j, num= 0;prime[num] =2;\/\/登...

用C语言:输入正整数n,m,求不大于n的m个互不相同的最大的素数
从n开始判断是不是素数,每次n--,直到找出m个素数为止。需要注意的是要包含头文件 <math.h> 判断是不是素数只要到sqrt(n)就可以了

C语言编程:计算并输出正整数[M,N]之间的素数之和及素数的个数,其中1...
int main(int argc,char *argv[]){ int M,N,sum,t,k;printf("Enter M & N(int 1<M<N)...\\n");if(scanf("%d%d",&M,&N)==2 && M>1 && M<N){\/\/输入M和N并判断 for(M==2 ? (k=1,sum=2) : k=sum=0,M+=!(M&1);M<=N;M+=2){\/\/求素数 for(t=3;t*t<...

输入两个正整数m和n(m>=1,n<=100)输出m和n之间的所有素数 c语言_百度知...
,&m);printf("Input n: ");scanf("%d",&n);if(m>n)\/\/m,n如果不是m小的话,换一下{i=m;m=n;n=i;}for(x=m;x<=n;x++)\/\/;这里多分号{y=sqrt(x*1.0);\/\/我是用C++的这里的重载要明确for(i=2;i<=y;i++)if(x%i==0)break;if(i>y)\/\/说明x是素数{printf("%4d"...

求m和n之间的所有素数
main() { int m=0,n=0,i,l=0; do { printf("Input m:"); scanf("%d",&m); printf("Input n:"); scanf("%d",&n); } while ((m<1 || n>500) || m>n); for (i=m;i<=n;i++) { if (...

c语言 输入两个正整数m和n(m<n),求m到n之间(包括m和n)所有素数的和,我...
for(i=2;i<x;i++){ if(x%i==0){ break;} } if(i == x){ flag = 1;} return flag;} int main(){ int sum=0,m,n,i;scanf("%d%d",&m, &n);for(i=m; i <n; i++){ if(is_prime(i)){ printf("%d\\n",i);sum+=i;} } printf("%d\\n",sum);return 0;} ...

C语言m~n之间的素数
void main(){ int m,n,i;int isPrime(int);scanf("%d %d",&m,&n);for(i=m;i<=n;i++)if(isPrime(i))printf("%d ",i);} int isPrime(int x) \/\/这个才是判断是否素数的函数,是返回1,不是返回0 { int i,flag=1;for(i=2;i<=sqrt(x);i++)if(x%i==0){ flag=0;bre...

相似回答