• CF396B. On Sum of Fractions


      1 /*
      2 cf396B. On Sum of Fractions
      3 http://codeforces.com/problemset/problem/396/B
      4 数论+裂项求和+素数筛+gcd
      5 */
      6 #include <cstdio>
      7 #include <algorithm>
      8 #include <cmath>
      9 using namespace std;
     10 const int Nmax=1000001;
     11 int n;
     12 int prime[Nmax];
     13 int is_prime[Nmax];
     14 int prime_cnt;
     15 long long a,b;
     16 long long gcd(long long x,long long y)
     17 {
     18     if(x%y==0)
     19         return y;
     20     else
     21         return gcd(y,x%y);
     22 }
     23 void get_prime()
     24 {
     25     for(int i=2;i<=Nmax-1;i++)
     26         is_prime[i]=1;
     27     for(int i=2;i<=Nmax-1;i++)
     28     {
     29         if(is_prime[i])
     30         {
     31             prime[++prime_cnt]=i;
     32             for(int j=2;j*i<=Nmax-1;j++)
     33             {
     34                 is_prime[i*j]=0;
     35             }
     36         }
     37     }
     38 }
     39 void get()
     40 {
     41     int flag;
     42     for(int i=n;i>=2;i--)
     43     {
     44         if(i<=Nmax-1)//i在素数表内直接判断
     45         {
     46             if(!is_prime[i])
     47                 continue;
     48             else
     49             {
     50                 a=i;
     51                 break;
     52             }
     53         }
     54         for(int j=1;j<=prime_cnt;j++)//否则枚举判断
     55         {
     56             flag=1;
     57             if(i%prime[j]==0)
     58             {
     59                 flag=0;
     60                 break;
     61             }
     62         }
     63         if(flag)
     64         {
     65             a=i;
     66             break;
     67         }
     68     }
     69     for(int i=n+1;;i++)
     70     {
     71         if(i<=Nmax-1)
     72         {
     73             if(!is_prime[i])
     74                 continue;
     75             else
     76             {
     77                 b=i;
     78                 break;
     79             }
     80         }
     81         for(int j=1;j<=prime_cnt;j++)
     82         {
     83             flag=1;
     84             if(i%prime[j]==0)
     85             {
     86                 flag=0;
     87                 break;
     88             }
     89         }
     90         if(flag)
     91         {
     92             b=i;
     93             break;
     94         }
     95     }
     96 }
     97 int main()
     98 {
     99     //freopen("cf396B.in","r",stdin);
    100     int t;
    101     scanf("%d",&t);
    102     get_prime();//素数筛 打出Nmax内的素数表
    103     while(t--)
    104     {
    105         scanf("%d",&n);
    106         get();//得到不超过n的素数a和大于n的素数b
    107         long long p=a*b-2*b+2*n-2*a+2,q=2*a*b;
    108         //约分
    109         long long gcdd=gcd(p,q);
    110         p=p/gcdd;
    111         q=q/gcdd;
    112         printf("%I64d/%I64d
    ",p,q);
    113     }
    114     return 0;
    115 }
  • 相关阅读:
    python入门 类的继承和聚合(五)
    如何快速找到多个字典中的公共键(1.4)
    python输入输出(二)
    python入门 集合(四)
    LOJ 3093: 洛谷 P5323: 「BJOI2019」光线
    LOJ 3049: 洛谷 P5284: 「十二省联考 2019」字符串问题
    【比赛游记】FJOI2019瞎打记
    ICPC World Finals 2019 题解
    LOJ 3043: 洛谷 P5280: 「ZJOI2019」线段树
    LOJ 2483: 洛谷 P4655: 「CEOI2017」Building Bridges
  • 原文地址:https://www.cnblogs.com/BBBob/p/6611027.html
Copyright © 2020-2023  润新知