zoukankan      html  css  js  c++  java
  • P7200 [COCI2019-2020#1] Lutrija

    发现相邻的奇数只能恰好差 (2)(偶质数只有 (2))。

    而大于 (1) 的连续的奇数有且仅有一个能被 (3) 整除,也就是说三个连续的奇数至多有两个是质数。

    所以相邻的奇数最多只有两个。

    但我们可以放偶质数 (2)。显然,放多个 (2) 肯定不优。

    于是我们就有 A A-2/A+2 2 B-2/B+2 B 这样的构造形式,根据情况可以省略部分。

    这样就能过了,本着精益求精的精神我们继续探究。

    (A) 来讲,要存在合法的条件必须满足 (A) 是孪生质数中的一个。

    假设 (A)(A-2) 是质数,我们显然不需要构造一个 (A-2) 项因为 (A)(2) 的差就是 (A-2)

    所以就可以少判断 (A-2) 这一项啦。

    时间复杂度 (O(sqrt A))

    code:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define For(i,x,y)for(i=x;i<=(y);i++)
    ll c[6];
    bool prime(ll p)
    {
    	if(p<2)return 0;
    	int i;
    	For(i,2,sqrt(p))
    	if(!(p%i))return 0;
    	return 1;
    }
    int main()
    {
    	ll a,b;
    	cin>>a>>b;
    	if(a==2&&b==2)cout<<-1,exit(0);
    	if(llabs(a-b)==2)cout<<"2
    "<<a<<' '<<b,exit(0);
    	int x,y,d=0,i;
    	x=(prime(a-2)?1:(prime(a+2)?2:(a==2?3:0)));
    	y=(prime(b-2)?1:(prime(b+2)?2:(b==2?3:0)));
    	if(!x||!y)cout<<-1,exit(0);
    	c[++d]=a;
    	if(x==2)c[++d]=a+2;
    	if(x!=3&&y!=3)c[++d]=2;
    	if(y==2)c[++d]=b+2;
    	c[++d]=b;
    	cout<<d<<endl;
    	For(i,1,d)cout<<c[i]<<' ';
    	return 0;
    }
    
  • 相关阅读:
    P3396 哈希冲突 TJ
    U135884 膜法问题 TJ
    U135075 简单数列 TJ
    U135649 皇室战争 TJ
    SF&SJJG-ST表
    牛客NOIP集训三S 牛半仙的妹子数 TJ
    UVA297 四分树 Quadtrees TJ
    UVA679 小球下落 Dropping Balls TJ
    [ACM] CF水题记
    Hoppz的收藏夹
  • 原文地址:https://www.cnblogs.com/May-2nd/p/14227267.html
Copyright © 2011-2022 走看看