zoukankan      html  css  js  c++  java
  • ny24 素数距离的问题 筛选法求素数

    素数距离问题
    时间限制: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<string.h>
     3 int v[1000000+10];
     4 
     5 int main()
     6 {
     7 int i,j,k,n,m,tot,x,y;
     8 memset(v,0,sizeof(v));//值为0则是素数
     9 v[1]=0;
    10 tot=0;
    11 for(i=2;i<=1000010;i++)
    12 if(!v[i])
    13 { //v[i]:第(++tot)个素数
    14 for(j=2;i*j<=1000010;j++) v[i*j]=1;//一开始这一点考虑少了1000000最近的输出了1000001应该是1000003 3,扩大了一下数据就对了
    15 }
    16 
    17 /*for(i=0;i<100;i++)
    18  if(v[i]==0)
    19       printf("%d ",i);*/
    20 scanf("%d",&m);
    21 while(m--)
    22 {
    23  scanf("%d",&n);
    24  if(n==1)
    25   printf("2 1
    ");
    26  else
    27  {
    28 for(x=0,i=n;;i--,x++)
    29 if(v[i]==0)
    30 break;
    31  for(y=0,j=n;;j++,y++)
    32   if(v[j]==0)
    33  break;
    34 if(x>y)
    35 printf("%d %d
    ",j,j-n);
    36 else if(x<y)
    37 printf("%d %d
    ",i,n-i);
    38 else printf("%d %d
    ",i,n-i);
    39 }
    40 }
    41 return 0;
    42 }
  • 相关阅读:
    使用kubeadm部署K8S v1.17.0集群
    06Shell并发控制
    05Shell循环语句
    04Shell流程控制
    03Shell条件测试
    02Shell变量
    01Shell入门02-echo和printf
    01Shell入门01-bash Shell特性
    局域网部署ntp时间服务器
    聊聊、Mybatis集成Spring XML方式
  • 原文地址:https://www.cnblogs.com/lovychen/p/3182716.html
Copyright © 2011-2022 走看看