素数求和问题
来源:互联网 发布:数据库人员报表查询 编辑:程序博客网 时间:2024/06/01 08:55
- 输入
- 第一行给出整数M(0<M<10)代表多少组测试数据
每组测试数据第一行给你N,代表该组测试数据的数量。
接下来的N个数为要测试的数据,每个数小于1000 - 输出
- 每组测试数据结果占一行,输出给出的测试数据的所有素数和
- 样例输入
351 2 3 4 5811 12 13 14 15 16 17 181021 22 23 24 25 26 27 28 29 30
- 样例输出
104152
解题思路:做这道题时,我的算法超时,借鉴了别人的算法。首先采用筛法选素数,存在一个数组中。输入待判断的数,利用二叉法遍历数组,如果不在数组中,寻找最接近的两个素数,判断距离寻找最近的素数。
#include<stdio.h>int a[10000001]={0};int main(){int i,j,len=0;//对不是素数的进行标记for(i=2;i<1000001;i++)if(a[i]==0){for(j=i+i;j<1000001;j=j+i)a[j]=1;}//将素数存进数组中for(i=2;i<1000001;i++)if(a[i]==0){a[len]=i;len++;}int T;scanf("%d",&T);while(T--){int n,low=0,end=len-1,mid;scanf("%d",&n);//二叉法遍历while(low<=end){mid=(low+end)/2;if(a[mid]==n){printf("%d 0\n",n);//输入值为素数时,直接输出break;}else if(a[mid]<n)low=mid+1;elseend=mid-1;}//输入值不为素数,进行判断,此时low>endif(low>end){if(n==1)printf("2 1\n");else if(a[low]-n>=n-a[end])printf("%d %d\n",a[end],n-a[end]);elseprintf("%d %d\n",a[low],a[low]-n);}}return 0;}
经验:做过这道题后,学会了筛法选素数,也有了将一个数组中的数进行删除的思路。
阅读全文
0 0
- NYOJ - 素数求和问题
- 素数求和问题
- 素数求和问题
- NYOJ22 素数求和问题
- 素数求和问题
- 素数求和问题
- 素数求和问题
- 素数求和问题
- NYOJ22 素数求和问题
- 素数求和问题
- 素数求和问题
- (22)素数求和问题
- 素数求和问题
- 素数求和问题
- NYOJ22素数求和问题
- 22 素数求和问题
- nyoj-素数求和问题
- 素数求和问题
- maven项目中 org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案
- C/C++:计算器
- NOIP2017普及组T1题解
- Windows程序设计(3):程序启动器(CreateProcess)
- hdu 4403 A very hard Aoshu problem
- 素数求和问题
- 熔断器 Hystrix 源码解析 —— 调试环境搭建
- iOS 一一 手势解锁
- 可变参数列表
- 算法分析与设计课程作业第九周#1#2#3
- 大整数排序
- LCA最近公共祖先
- Java基础——多线程
- 我的编程日记