LightOJ 1259 Goldbach`s Conjecture

2024-05-12 19:32

本文主要是介绍LightOJ 1259 Goldbach`s Conjecture,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:
给出一个偶数n,求出有几对素数的和等于n;即素数a,b其中(a <=b < n)    问有几对a+b = n。
分析:
一开始用素数打表,开个1e7的int数组存是否为素数, 最后再遍历 这些素数,是否存在 b =(n-这个数),  如果b还是素数,并且b >= a,则存在一组,ans++。
一开始内存超限了几次,后来学到了,开的数组可以开个bool类型的,bool 每一个只占一个字节,而int占四个字节,内存一下就变成了1/4。
代码:

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;typedef long long ll;
const int N = 10000010;
bool b[N] = {1, 1, 0};
int prim[700000];
void dabiao()
{int t = 1;for(int i = 2; i < N; i++){if(!b[i]){prim[t++] = i;for(int j = i + i; j <= N; j += i)b[j] = 1;}}
}
int main()
{int t; scanf("%d", &t);int kase = 1;dabiao();while(t--){int n, ans = 0; scanf("%d", &n);for(int i = 1; prim[i] <= n/2; i++){if(b[n-prim[i]] == 0) ans++;}printf("Case %d: %d\n", kase++, ans);}return 0;
}


这篇关于LightOJ 1259 Goldbach`s Conjecture的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983533

相关文章

【ZOJ】3881 From the ABC conjecture【暴力容斥】

传送门:【ZOJ】3881 From the ABC conjecture 复杂度大概 O(N0.67) O(N^{0.67}),我也不会算www,首先转换一下(我们是根据积性函数打表找规律得到的,也可以推出来)使得: g(N)=∏pi ϵ N(pia+1) g(N)=\prod_{pi~\epsilon ~N} (pi^a+1) 暴力展开发现贡献为: h(N)=

POJ2262.Goldbach's Conjecture(哥德巴赫的猜想)

【题意】 哥德巴赫猜想:大于四的偶数可以分解为两个奇素数之和 对于给出的数n,如果有多对奇数素数加起来为n,则选择差值b-a最大化的。 若没有这样的一对,则打印"Goldbach's conjecture is wrong." 【思路】 枚举:直接枚举所有的,看是否符合条件,从小到大枚举到中间的话符合条件的也就是差值最大的 #include<stdio.h> #include<string

LightOJ 1068 Investigation (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数字之和也能被K整除的数的个数。(1 ≤ A ≤ B < 231 and 0 < K < 10000) 算是最简单的数位dp了,k在这里是10000,三维数组都开不开。但是想想会发现A,B最多有10位,各位数字之和不会超过90,那么当

lightoj 1050 - Marbles (概率DP)

思路:定义dp[i][j] 为 袋子中有i个红球和j个红球时获胜的概率 那么根据题意我只可以任意拿而对手只拿蓝球。那么 dp[i][j] = (拿到红球的概率) * dp[i-1][j-1] + (拿到蓝球的概率) * dp[i][j-2]; 边界:当红球没有时,获胜的概率为1 注意点:T比较大,需要把所有数据预处理出来直接查询,否则超时 /*********************

lightoj 1047 Neighbor House(Dp)

思路:定义dp[i][j] 为粉刷第i个房子用的颜色j dp[i][j] = min(dp[i-1][(j+1)%3] , dp[i-1][(j+2) % 3]); 一共有三种颜色{0, 1, 2},任取一种颜色{j},那么和颜色j不同的颜色就为{(j + 1) % 3 , (j + 2) % 3}; /******************************************

lightoj 1044 Palindrome Partitioning(dp)

题意:给定字符串S,问可以划分的最小回文串数量 思路:定义dp[i]为以i开头的字符串中回文串的最小划分数. dp[i] = min(dp[j] + 1 | i <= j < n && S[i...j]是回文串) 边界,dp[i] = n-i+1. /************************************************ Author: fisty* Crea

lightoj 1037 - Agent 47 (状压DP)

题意:你现在需要消灭n个敌人,n个敌人的血量已知,你的普通攻击力为1,但是如果你杀死敌人i可以用它的武器去杀死其他敌人,p[i][j] 表示用敌人i的武器射杀敌人j会减p[i][j]滴血.问你最少可以攻击多少次可以将敌人杀死。 思路: 定义集合s为死亡敌人的集合。 dp[s] 为让集合为s的人死亡最小需要的攻击次数。 如果现在想要消灭敌人i 并且敌人i不属于s 那么dp[s | (1<<

lightoj 1032 - Fast Bit Calculations (数位DP)

记忆花搜索:dp[len][num][last] : 现在处理第len位,前面有num个11,并且最后一位为last。 /************************************************ Author: fisty* Created Time: 2015-08-18 20:18:09* File Name : 1032.cpp***************

[LightOJ 1292] Laser Shot (几何,判断共线)

LightOJ - 1292 刚开始写的时候是O( n3log(n) n^3log(n))的,枚举两个点,得到一条直线,用set记录下来,然后再 O( n n)地计数,居然没有卡过 orz 听了学长的教导,get到一个几何常用思路,正确解法如下 枚举一个点,再枚举其他点,计算到这个点的斜率,make_pair(dx,dy)塞到map里,把相同斜率的计数一下 这样时间复杂度为 O(n2log

[LightOJ 1364] Expected Cards (高维期望DP)

LightOJ - 1364 一副扑克牌,不断地从中抽牌 要求四种花色都至少要有给定的张数 其中如果抽到了王牌,可以将其变为任意花色 求满足条件时,抽出的期望张数 刚开始想错了,两张王牌并非在一开始就给定了 而是在游戏中可以视当前情况选择着变的 这两种方式是不一样的 由于牌数其实并不会很多, 复杂度乘一乘发现才 107 10^7级别的,所以直接暴力DP 将两张王牌当