#includestdio.h
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),淇濱企業(yè)網(wǎng)站建設(shè),淇濱品牌網(wǎng)站建設(shè),網(wǎng)站定制,淇濱網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,淇濱網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
// 可逆素數(shù)就是該數(shù)及其反數(shù)均為素數(shù)
int IsPrime(int i);
int GetFanShu(int n);
int main(int argc, char *argv[])
{
int m, n;
do
{
printf("請輸入一個自然數(shù):");
scanf("%d", m);
}while(m2);
n = GetFanShu(m);
if( IsPrime(m) IsPrime(n) )
printf("數(shù)字%d為可逆素數(shù)!\n", m);
else
printf("數(shù)字%d不是可逆素數(shù)!\n", m);
return 0;
}
int IsPrime(int iNum)
{
int k;
for(k=2; kiNum/2; k++)
{
if( iNum%k==0 )
return 0;
}
//printf("數(shù)字%d為素數(shù)!\n", iNum);
return 1;
}
int GetFanShu(int iNum)
{
int i=0, tmp=iNum;
while(iNum0)
{
i = i*10 + iNum%10;
iNum = iNum/10;
}
//printf("自然數(shù)%d的反序數(shù)為:%d\n", tmp, i);
return i;
}
偶數(shù)不是素數(shù),所以只判斷4位奇數(shù);最高位是偶數(shù)的也不是所求之?dāng)?shù),故跳過。然后判斷是否為回文數(shù),是的再判斷是否為素數(shù);是的話輸出這個素數(shù)。提供以下參考代碼:
//#include?"stdafx.h"http://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){//偶數(shù)不是素數(shù),不參與
if((i/10001)==0)?i+=1000;//最高位是偶數(shù)的不是所求之?dāng)?shù),跳過
if(i/1000==i%10??i/100%10==i/10%10){//是回文數(shù)的再判是否為素數(shù)
for(j=3;(k=j*j)=i;j+=2)//判斷素數(shù)
if(i%j==0)?break;
if(ki)printf("%d?",f=i);//輸出回文素數(shù)
}
}
printf(f???"\n"?:?"There?is?no?such?a?prime?number.\n");
return?0;
}
思路:
首先你要確定這個函數(shù)要處理的素數(shù)的最大位數(shù)有幾位,因為素數(shù)是有無窮多的!
程序流程:
1.例如你要處理一個最大不超過5位數(shù)的素數(shù),第一步就算要將這個素數(shù)從最大位數(shù)取余數(shù),然后到第二3.4.5.把輸入的數(shù)字,拆分成幾個數(shù)字,并分別把他們存到一個變量里面,這里有一點需要注意,如果素數(shù)位數(shù)只有2位或者3位,其他的變量請對他們賦一個特殊的值,例如-1什么的方便后面的處理
2.然后用排列組合的規(guī)則對這5個變量排序并用一個數(shù)組記錄每次排序后的數(shù)字。
3.就是對上面的數(shù)組的每一個量進(jìn)行求最大公約數(shù)處理,網(wǎng)上很多源代碼的直接下就行了。如果最大公約數(shù)是這個變量里面的數(shù)本身,那么這個數(shù)就是素數(shù)如果不是就繼續(xù)測試下一個數(shù),否則返回一個值,代理這個數(shù)不是自己想要的數(shù) 調(diào)用函數(shù)輸出no!
代碼寫得較亂,以下給出結(jié)構(gòu)較清晰的同功能代碼,供對照查錯:
#include stdio.h
#include stdlib.h
//判斷給定值是否為素數(shù)
int isPrime( int num )
{
int v;
for( v=2; v=(num/2); v++ )
{
if( num % v == 0 ) return 0;
}
return 1;
}
//反轉(zhuǎn)給定值
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) ); //此處保證數(shù)值區(qū)間距離非零非負(fù)
sv = MAX(sv,2); //此處保證跳過非合數(shù)非素數(shù)的數(shù)值1
for( i=sv; i=ev; i++ )
{
if( i9 ) //此處保證忽略測試小于10的值
{
r = numReverse( i );
//若兩數(shù)均為素數(shù)且兩數(shù)不相等
if( isPrime( i ) isPrime( r ) (i!=r) )
{
printf( "%d %d\n", i, r );
cnt++;
}
}
}
printf( "Count = %d\n", cnt );
return 0;
}