zoukankan      html  css  js  c++  java
  • 素数距离问题

    素数距离问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:2
     
    描述
    现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
    如果输入的整数本身就是素数,则输出该素数本身,距离输出0
     
    输入
    第一行给出测试数据组数N(0<N<=10000)
    接下来的N行每行有一个整数M(0<M<1000000),
    输出
    每行输出两个整数 A B.
    其中A表示离相应测试数据最近的素数,B表示其间的距离。
    样例输入
    3
    6
    8
    10
    样例输出
    5 1
    7 1
    11 1
     1 #include <stdio.h>
     2 #include <math.h>
     3 
     4 #define TRUE 1
     5 #define FALSE 0
     6 
     7 int isPrime(int);
     8 
     9 int main()
    10 {
    11     int times;                        //测试数据组数
    12 
    13     scanf("%d", &times);
    14 
    15     while(times > 0)
    16     {
    17         int num;                    //待处理数据
    18 
    19         scanf("%d", &num);
    20 
    21         if(num == 1)                //如果输入的是1
    22         {
    23             printf("%d %d
    ", 2, 1);
    24             times --;
    25             continue;
    26         }
    27         else if(isPrime(num) == TRUE)    //输入的是质数
    28         {
    29             printf("%d %d
    ", num,0);
    30             times --;
    31             continue;
    32         }
    33         else
    34         {
    35             int num_left, num_right;
    36             int i = 1;
    37             for(; i < num; i ++)
    38             {
    39                 num_left = num - i;
    40                 num_right = num + i;
    41                 if(isPrime(num_left) == TRUE && isPrime(num_right) == TRUE)            //左右都是质数 
    42                 {
    43                     printf("%d %d
    ", num_left, i);                                    //输出左边的数和距离
    44                     break;
    45                 }
    46                 else if(isPrime(num_left) == TRUE || isPrime(num_right) == TRUE)
    47                 {
    48                     if(isPrime(num_left) == TRUE)
    49                     {
    50                         printf("%d %d
    ", num_left, i);
    51                         break;
    52                     }
    53                     else
    54                     {
    55                         printf("%d %d
    ", num_right, i);
    56                         break;
    57                     }
    58                 }
    59             }
    60         }
    61         times --;
    62     }
    63 }
    64 //判断num是否为质数
    65 int isPrime(int num)
    66 {
    67     int flag = TRUE;
    68     int i = 0;
    69 
    70     for(i = 2; i <= sqrt(num); i ++)
    71     {
    72         if(num % i == 0)
    73         {
    74             flag = FALSE;
    75             break;                    //不是质数
    76         }
    77     }
    78 
    79     if(num == 1)
    80         flag = FALSE;                //1不是质数
    81 
    82     return flag;
    83         
    84 }

    代码还可以优化一下

  • 相关阅读:
    .net remoting 易则易知,简则易从
    委托和匿名方法学习心得
    (4)插入排序之二 折半插入排序
    (2)排序概述
    (3)插入排序之一 直接插入排序
    (5)插入排序之三 2路插入排序
    (9)交换排序之二 快速排序
    (7)插入排序之五 希尔排序
    (6)插入排序之四 表插入排序
    (8)交换排序之一 起泡排序
  • 原文地址:https://www.cnblogs.com/luckygxf/p/3684370.html
Copyright © 2011-2022 走看看