南阳ACM24-素数距离问题

/*

素数距离问题

时间限制: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

*/

//呵呵 ,用c语言写的,

#include <stdio.h>

#include <math.h>

int isPrime(int n);

int main()

{

int i, n, num, temp1 = 0, temp2 = -1, flag = 0;

/* while(1)

{

scanf("%d", &n);

if (isPrime(n))

{

printf("is Prime\n", n);

}

else

{

printf("no\n");

}

}

*/

scanf("%d", &n);

while (n--)

{

scanf("%d", &num);

if (num == 1)

{

printf("2 1\n");

continue;

}

for (i = 0; i < num; ++i)

{

flag++;

temp1 = num + i*temp2;

// printf("temp = %d %d\n", temp1, temp2);

temp2 = temp2 * (-1);

if ((temp1>2 && temp1%10%2==0) || (temp1>3 && temp1%3 == 0) || (temp1>5 && temp1%5==0))

{

if (flag % 2 != 0)

{

--i;

}

continue;

}

else

{

if (isPrime(temp1))

{

break;

}

}

if (flag % 2 != 0)

{

--i;

}

}

if (temp1 > num)

{

if (isPrime(num-(temp1-num)))

{

printf("%d %d\n", 2*num-temp1, temp1-num);

}

else

{

printf("%d %d\n", temp1, temp1-num);

}

}

else if (temp1 < num)

{

printf("%d %d\n", temp1, num-temp1);

}

else if (temp1 == num)

{

printf("%d 0\n", num);

}

}

return 0;

}

int isPrime(int n)

{

int i = 2, a;

a = sqrt(n) + 1;

// printf("a = %d  %lf\n", a, sqrt(3.0));

if (n == 2)

{

return 1;

}

for (i = 2; i <= a; ++i)

{

if (n % i == 0)

{

return 0;

}

}

return 1;

}

作者:http://blog.csdn.net/lp310018931

时间: 2024-10-29 19:08:25

南阳ACM24-素数距离问题的相关文章

南阳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

素数距离问题

素数距离问题 时间限制: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表示离相应测试数据最近的

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

南阳oj~~素数

描述 走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起,就将与手持终端密不可分,人类未来梦想的惊喜从参观者的掌上展开. 在等候区的梦想花园中,参观者便开始了他们奇妙的体验之旅,等待中的游客可利用手机等终端参与互动小游戏,与梦想剧场内的虚拟人物Kr. Kong 进行猜数比赛.当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物. 例如:当屏幕出现22时,

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

【南阳OJ分类之语言入门】80题题目+AC代码汇总

声明: 题目部分皆为南阳OJ题目. 代码部分包含AC代码(可能不止一个)和最优代码,大部分都是本人写的,并且大部分为c代码和少部分c++代码and极少java代码,但基本都是c语言知识点,没有太多差别,可能代码有的写的比较丑,毕竟知识有限. 语言入门部分题基本都较为简单,是学习编程入门的很好练习,也是ACM的第一步,入门的最佳方法,望认真对待. 本文由csdn-jtahstu原创,转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:1373758426和csdn博客地址. now begi