最后一个点TLE。。。╮(╯▽╰)╭

P1579 哥德巴赫猜想(升级版)

SZnP @ 2021-08-24 21:48:11

#include <iostream>
#include <cstdio> 
using namespace std;
int v[50000];
bool ss(int a)
{
    if(v[a]!=-1)return v[a];
    if(a<=1){v[a]=0;return 0;}
    for(int i=2;i<a;i++)
    if(a%i==0){v[a]=0;return 0;}
    v[a]=1;
    return 1;
}
int main()
{
    memset(v,-1,sizeof(v));
    int n,imin=65536,jmin=65536,k;
    cin>>n;
    for(int i=0;i<=n;i++)
    for(int j=0;j<=n;j++)
    {
        if(n-i-j>=0&&ss(i)&&ss(j)&&ss(n-i-j))
        if(i<imin)
        {
            imin=i;
            jmin=j;
            k=n-i-j;
        }
        else
        if(i==imin&&j<jmin)
        {
            imin=i;
            jmin=j;
            k=n-i-j;
        }
    }
    printf("%d %d %d",imin,jmin,k);
    return 0;
}

by SZnP @ 2021-08-24 21:50:22

19813

3 17 19793

--------------------------------

Process exited after 4.678 seconds with return value 0

请按任意键继续. . .


by SZnP @ 2021-08-24 21:50:51

以上是最后一个点的数据


by 一SakuRa @ 2021-08-24 21:51:08

@LXLLZG

bool ss(int a)
{
    if(v[a]!=-1)return v[a];
    if(a<=1){v[a]=0;return 0;}
    for(int i=2;i<a;i++)
    if(a%i==0){v[a]=0;return 0;}
    v[a]=1;
    return 1;
}

判断素数部分可以优化一下,别的不清楚


by SZnP @ 2021-08-24 21:52:43

记录


by SZnP @ 2021-08-24 21:54:02

@一SakuRa 谢谢


by SZnP @ 2021-08-25 10:11:49

然而好像并没有什么用。。。


by QuAckB33 @ 2021-08-25 12:25:09

@LXLLZG 开O2就过了


by SZnP @ 2021-08-25 16:09:26

@Chuuyasang 还真是。。。


by 雨伞CKY @ 2021-11-13 18:09:14

@LXLLZG 尽管开启 O2 优化可以轻松 AC, 但是还是应该优化一下判断质数(素数)的函数。

建议你参考 Rosmarinus 的博客《Rosmarinus の 奇妙数论学习笔记》中的【质数】部分,修改你判断质数的函数。


|