重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
创新互联公司是一家集网站建设,淇滨企业网站建设,淇滨品牌网站建设,网站定制,淇滨网站建设报价,网络营销,网络优化,淇滨网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
// 可逆素数就是该数及其反数均为素数
int IsPrime(int i);
int GetFanShu(int n);
int main(int argc, char *argv[])
{
int m, n;
do
{
printf("请输入一个自然数:");
scanf("%d", m);
}while(m2);
n = GetFanShu(m);
if( IsPrime(m) IsPrime(n) )
printf("数字%d为可逆素数!\n", m);
else
printf("数字%d不是可逆素数!\n", m);
return 0;
}
int IsPrime(int iNum)
{
int k;
for(k=2; kiNum/2; k++)
{
if( iNum%k==0 )
return 0;
}
//printf("数字%d为素数!\n", iNum);
return 1;
}
int GetFanShu(int iNum)
{
int i=0, tmp=iNum;
while(iNum0)
{
i = i*10 + iNum%10;
iNum = iNum/10;
}
//printf("自然数%d的反序数为:%d\n", tmp, i);
return i;
}
偶数不是素数,所以只判断4位奇数;最高位是偶数的也不是所求之数,故跳过。然后判断是否为回文数,是的再判断是否为素数;是的话输出这个素数。提供以下参考代码:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
int i,j,k,f=0;
for(i=1001;i10000;i+=2){//偶数不是素数,不参与
if((i/10001)==0) i+=1000;//最高位是偶数的不是所求之数,跳过
if(i/1000==i%10 i/100%10==i/10%10){//是回文数的再判是否为素数
for(j=3;(k=j*j)=i;j+=2)//判断素数
if(i%j==0) break;
if(ki)printf("%d ",f=i);//输出回文素数
}
}
printf(f ? "\n" : "There is no such a prime number.\n");
return 0;
}
思路:
首先你要确定这个函数要处理的素数的最大位数有几位,因为素数是有无穷多的!
程序流程:
1.例如你要处理一个最大不超过5位数的素数,第一步就算要将这个素数从最大位数取余数,然后到第二3.4.5.把输入的数字,拆分成几个数字,并分别把他们存到一个变量里面,这里有一点需要注意,如果素数位数只有2位或者3位,其他的变量请对他们赋一个特殊的值,例如-1什么的方便后面的处理
2.然后用排列组合的规则对这5个变量排序并用一个数组记录每次排序后的数字。
3.就是对上面的数组的每一个量进行求最大公约数处理,网上很多源代码的直接下就行了。如果最大公约数是这个变量里面的数本身,那么这个数就是素数如果不是就继续测试下一个数,否则返回一个值,代理这个数不是自己想要的数 调用函数输出no!
代码写得较乱,以下给出结构较清晰的同功能代码,供对照查错:
#include stdio.h
#include stdlib.h
//判断给定值是否为素数
int isPrime( int num )
{
int v;
for( v=2; v=(num/2); v++ )
{
if( num % v == 0 ) return 0;
}
return 1;
}
//反转给定值
int numReverse( int num )
{
int i, val=0;
for( i=0; num; i++ )
{
val *= 10;
val += (num % 10);
num /= 10;
}
return val;
}
#define MAX(a,b) ((a)(b)?(a):(b))
int main( int argc, char ** argv )
{
int i, r, sv, ev, cnt=0;
do {
printf( "Please input two integers: " );
scanf( "%d %d", sv, ev );
} while( (sv = ev) ); //此处保证数值区间距离非零非负
sv = MAX(sv,2); //此处保证跳过非合数非素数的数值1
for( i=sv; i=ev; i++ )
{
if( i9 ) //此处保证忽略测试小于10的值
{
r = numReverse( i );
//若两数均为素数且两数不相等
if( isPrime( i ) isPrime( r ) (i!=r) )
{
printf( "%d %d\n", i, r );
cnt++;
}
}
}
printf( "Count = %d\n", cnt );
return 0;
}