程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 素數距離問題,素數距離

素數距離問題,素數距離

編輯:關於C語言

素數距離問題,素數距離


/*
描述
現在給出你一些數,要求你寫出一個程序,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。
如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0
輸入
第一行給出測試數據組數N(0<N<=10000)
接下來的N行每行有一個整數M(0<M<1000000),
輸出
每行輸出兩個整數 A B.
其中A表示離相應測試數據最近的素數,B表示其間的距離。
樣例輸入
3
6
8
10
樣例輸出
5 1
7 1
11 1
00*00*/

/*
3
6
5 1
8
7 1
10
11 1
*/

#include <stdio.h>
#include "stdlib.h"

//判斷是否為素數
int isPrime(int num)
{
    if (num==1) {
        return 0;
    }
    for (int i=2; i*i<=num; i++) {
        if (num%i==0) {
            return 0;
        }
    }
    return 1;
}

int main(int argc, const char * argv[]) {
    // insert code here...

    int n,num,numUp,numDown,deltUp,deltDown;
    scanf("%d",&n);
    while (n--) {
        scanf("%d",&num);
        if (isPrime(num)) {
            printf("%d 0\n",num);
        }else{
            numUp=numDown=num;
            while (!isPrime(numUp)) {
                numUp+=1;
            }
            while (!isPrime(numDown)&&numDown>0) {
                numDown-=1;
            }
            deltUp=numUp-num;
            deltDown=num-numDown;
            
            if (numDown==0) {
                printf("%d %d\n",numUp,deltUp);
            }else if (deltUp>=deltDown){
                printf("%d %d\n",numDown,deltDown);
            }else{
                printf("%d %d\n",numUp,deltUp);
            }
        }
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved