Campamento de verano 2 8

Hermano primo

Los llamados números primos hermanos se refieren a números primos adyacentes separados por 2, y la distancia entre ellos es demasiado cercana, al igual que los hermanos.
El primo hermano más pequeño es (3, 5), y los primos gemelos dentro de 100 son (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), ( 59, 61) y (71, 73), hay 8 grupos en total.
Pero a medida que aumenta el número, la distribución de números primos hermanos se vuelve cada vez más escasa, y se vuelve cada vez más difícil encontrar números primos hermanos. ¿No habrá números primos hermanos después de cierto límite?
¡Hay infinitos pares de números primos hermanos! Esta conjetura se llama la conjetura del hermano primo y no se ha probado rigurosamente. Pero con la ayuda de una computadora, de hecho podemos encontrar todos los pares de números primos hermanos en el rango de números arbitrariamente grandes.
Ingrese un número entero positivo n (n <= 1000000) y encuentre el número de pares de números primos hermanos dentro de n (sin incluir n).
Por ejemplo, cuando n = 100, el número de pares primos hermanos dentro de 100 es 8.

Use un tamiz de números primos para guardar cada número primo, y luego comience desde el primer número primo hasta el último, y cada uno juzgue si los dos números primos son exactamente dos diferentes.

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    
    
    int f=1,res=0;char ch=getchar();
    while(!isdigit(ch)){
    
    if(ch=='-')f=-f;ch=getchar();}
    while(isdigit(ch)){
    
    res=(res<<1)+(res<<3)+(ch&15);ch=getchar();}
    return res*f;
}
int vis[1000010];
int n,a[1000010],k,ans;
inline void su()//素数筛O(nlogn)
{
    
    
    vis[1]=1;
    for(int i=2;i<=n;i++)
    {
    
    
        if(!vis[i])
        {
    
    
          a[++k]=i;
          for(int j=i*2;j<=n;j+=i)vis[j]=1;
        }
    }
}
int main()
{
    
    
    n=read();su();
    for(int i=1;i<=k;i++)
    {
    
    
        if(a[i+1]==a[i]+2)ans++;
    }
    cout<<ans;
    return 0;
}


Jugando con valores absolutos

Jugando con valores absolutos


Deformación triangular digital 2

La primera fila n, lo que significa que n filas <= 25, la segunda an + 1 filas cada programa de peso debe pasar por el punto n div 2, n div 2

Práctica metafísica, agregue un número muy grande a [n / 2] [n / 2], porque la transferencia es tomar el máximo, luego debe seleccionarse un [n / 2] [n / 2] y simplemente restarlo al final

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    
    
    int f=1,res=0;char ch=getchar();
    while(!isdigit(ch)){
    
    if(ch=='-')f=-f;ch=getchar();}
    while(isdigit(ch)){
    
    res=(res<<1)+(res<<3)+(ch&15);ch=getchar();}
    return res*f;
}
int n,a[35][35],k;
long long dp[35][35],ans;
int main()
{
    
    
    n=read();
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    a[i][j]=read();
     
    a[n/2][n/2]+=1e6;
     
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];//状态转移
     
    for(int i=1;i<=n;i++)ans=max(ans,dp[n][i]);
    cout<<ans-1e6;
    return 0;
}


Little W y la propuesta

Little W y la propuesta

Supongo que te gusta

Origin blog.csdn.net/yhhy666/article/details/108276500
Recomendado
Clasificación