ACM--素数距离问题

题目描述:现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int isPrime(int a){
    int i;
    if(a==1){
        return 0;
    }
    for(i=2;i<a;i++){
        if(a%i==0){
            return 0;
        }
    }
    return 1;
}

int lastPrime(int a){
    int i,left,right;
    if(a==1){
        return 2;
    }else{
        // 寻找a左侧的素数保存再变量left中
        for(i=a-1;i>=2;i--){
            if(isPrime(i)){
                left = i;
                break;
            }
        }
        // 寻找a右侧的素数并保存到变量right中
        for(i=a;;i++){
            if(isPrime(i)){
                right = i;
                break;
            }
        }
        // 计算哪个值距离更小
        if(abs(a-left)<abs(a-right)){
            return left;
        }else if(abs(a-left)>abs(a-right)){
            return right;
        }else{
            return left;
        }
    }
}
int main()
{
    // 输入一个测试的整数表示有多少组数
    int N,M,lastDigit,distance,flag;
    scanf("%d",&N);
    // 循环输入这N个数
    while(N>=1){
        scanf("%d",&M);
        // 判断这个数本身是否是一个素数
        flag = isPrime(M);
        if(flag){
            printf("%d %d\n",M,0);
        }else{
            // 输入的数字本身不是素数,则找出距离它最小的素数并返回
            lastDigit = lastPrime(M);
            distance = abs(M-lastDigit);
            printf("%d %d\n",lastDigit,distance);
        }
        N--;
    }
    return 0;
}

运行结果如下:

时间: 2024-10-02 09:01:19

ACM--素数距离问题的相关文章

素数距离问题

素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B. 其中A表示离相应测试数据最近的素数,B表示其间的距

nyoj 24 素数距离问题

素数距离问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B. 其中A表示离相应测试数据最近的

南阳oj 语言入门 素数 题目169 素数距离 题目24

 素数  题目169 #include<stdio.h> #include<math.h> int main(){ int prime(int a); int i,j,n,rd,ld,p; scanf("%d",&n); while(n--){ int num,lnum,rnum; scanf("%d",&num); if(num==1){ printf("2\n"); continue; } p=pr

nyoj 素数距离

素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离.如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000)接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B.其中A表示离相应测试数据最近的素数,B表示其间的距离.

NYOJ_24 素数距离问题

题目地址 难度:2. 分析: 本题思想很简单,循环num次,每次输入一个数判断是否是素数,再计算最近的素数和距离. 不过第一遍写完提交AC不了.仔细阅读提示,觉得是边界条件没有考虑清楚. 最后输入测试数据  n= 1  发现输出是 0 1 . 也就是我判断素数的时候没有考虑输入0的情况. 心得: 1.注意边界条件 2.能return就直接return,不要赋值之后再return.见下面分析. #include<iostream> #include<math.h> using nam

nyOJ基础题:素数距离

//一次性全部生成完,想用多少用多少,时间长点#include <iostream> #include<stdio.h> char min(char a, char b){ return (a>b)?b:a;} char max(char a, char b){ return (a>b)?a:b;} void swapIntOrChar(int a, int b){ a^=b^=a^=b;} bool isPrime(int n){ if(n==1) return fa

ZJNU 1223 - 素数距离——高级

因为最大可以达到int极限 明显直接筛选不可能完成 所以从其因子入手 因为任何不是素数的数都有除了1与其自身之外的因子 因此,我们筛出2^(31/2)≍46350之内的所有素数,以其作为因子再将题目给定区间内的所有不是素数的数标记排除 然后将素数存放在prnum这个vector集合中便于调用 在排除阶段,可以用 l=((L+prnum[i]-1)/prnum[i])*prnum[i] 计算出区间内的第一个是prnum[i]的倍数的数 注意,如果计算出来的使其本身,取倍数 再用 r=R/prnum

南阳ACM24-素数距离问题

/* 素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右 有等距离长度素数,则输出左侧的值及相应距离. 如果输入的整数本身就是素数,则输出该素数本身,距离输出0 输入 第一行给出测试数据组数N(0<N<=10000) 接下来的N行每行有一个整数M(0<M<1000000), 输出 每行输出两个整数 A B. 其中A表示离相应测试数据最近的素数,B表示

获取小于N的素数 优化筛选法的C++实现

孪生素数(间隔为2的相邻素数)的相关定理与推论 P1: 当 N 不小于 6 且 N-1 和 N+1 为 孪生素数, 则 N 一定是 6的倍数 T1:当 N 不小于 1 且 N=6x-1 或 N=6x+1 不是素数, 那么 N 一定不是 2和 3的倍数 P2:当N 不小于 5 时,若 N 为素数,那么N mod 6 =1或N mod 6 = 5 T2: 一个大于5的数有且只有整除6余数是 1 或者 5 才有可能是素数 一个数 整除6 的余数 可能是 1,2,3,4,5 但是 余数 为2,3,4的情

CodeForces937B:Vile Grasshoppers(素数性质)

The weather is fine today and hence it's high time to climb the nearby pine and enjoy the landscape. The pine's trunk includes several branches, located one above another and numbered from 2 to y. Some of them (more precise, from 2 to p) are occupied