ZOJ Goldbach 2013年长沙赛区网络赛
迟到了一天的AC。。。。
思路:
先把单个素数 或着 两个素数能组成的情况预处理一下,然后对于给出的 n,拿第三个素数去和两个素数的情况匹配,最后要注意去重。
详情见代码。
因为手残少敲了一个 else ,Debug了一晚上。。。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio> using namespace std; const long long int INF = 1000000007; bool MarkVisit[80010] = {false};
long long int pri[80010];
long long int s[80010] = {0};
long long int sm[80010] = {0};//a*a
long long int sa[80010] = {0};//a+a
long long int dm[80010] = {0};//a*b
long long int da[80010] = {0};//a+b int main()
{
int i,j; int top = 0; for(i = 2; i <= 80000; ++i)//挫到荼靡的素数筛。。。
{
if(MarkVisit[i] == false)
{
pri[top++] = i; for(j = i+i; j <= 80000; j += i)
{
MarkVisit[j] = true;
}
}
} for(i = 0; i < top; ++i)//预处理
{
s[pri[i]]++;//一个素数的情况 if(pri[i]*2 <= 80000)
{
sa[pri[i]*2]++;//两个相同的素数相加的情况
}
if(pri[i]*pri[i] <= 80000)
{
sm[pri[i]*pri[i]]++;//两个相同的素数相乘的情况
} for(j = i+1; j < top; ++j)
{
if(pri[i] + pri[j] <= 80000)
{
da[pri[i] + pri[j]]++;两个不相同的素数相加的情况
} if(pri[i]*pri[j] <= 80000)
{
dm[pri[i]*pri[j]]++;//两个不相同的素数相乘的情况
}
}
} int n; long long int tempsum, sum; while(scanf("%d",&n) != EOF)
{
sum = s[n] + dm[n] + da[n] + sa[n] + sm[n];//先把一个或两个素数的情况统计出来 for(i = 0,tempsum = 0; i < top; ++i)
{
if(n%pri[i] == 0)
{
if(n == pri[i]*pri[i]*pri[i])//如果三个数相同 则此种情况重复计算一次 *3 补成三次
{
tempsum += sm[n/pri[i]]*3 + dm[n/pri[i]];
}
else tempsum += sm[n/pri[i]]*2 + dm[n/pri[i]];//如果只有来两个相同 则此种情况重复计算两次。
//因为另一种单独计算 所以只需对其中一次*2 补成三次 }
if(n >= pri[i])
{
sum += sm[n-pri[i]];//+ && *都出现的不会重复
sum += dm[n-pri[i]];
sum %= INF; if(n == pri[i]*3)//此种情况 和 * 形同 不再赘述
{
tempsum += da[n-pri[i]] + sa[n-pri[i]]*3; } else tempsum += da[n-pri[i]] + sa[n-pri[i]]*2;
//就是因为少了这个else...险些把这一晚上都废了。。。
}
else break;
}
sum %= INF;
sum += tempsum/3;//因为每一种都出现了3次
sum %= INF; printf("%lld\n",sum);
}
return 0;
}
ZOJ Goldbach 2013年长沙赛区网络赛的更多相关文章
- HDU 4793 Collision (解二元一次方程) -2013 ICPC长沙赛区现场赛
题目链接 题目大意 :有一个圆硬币半径为r,初始位置为x,y,速度矢量为vx,vy,有一个圆形区域(圆心在原点)半径为R,还有一个圆盘(圆心在原点)半径为Rm (Rm < R),圆盘固定不动,硬 ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- ICPC 2018 徐州赛区网络赛
ACM-ICPC 2018 徐州赛区网络赛 去年博客记录过这场比赛经历:该死的水题 一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. D. Easy Math 题意: ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem【状态压缩】
2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem 题意:给定N和α还有M个U={1,2,3,...N}的子集,求子集X个数,X满足:X是U ...
- HDU 5875 Function -2016 ICPC 大连赛区网络赛
题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...
- ACM-ICPC 2018 徐州赛区(网络赛)
目录 A. Hard to prepare B.BE, GE or NE F.Features Track G.Trace H.Ryuji doesn't want to study I.Charac ...
- ACM-ICPC 2018 沈阳赛区(网络赛)
D.Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with he ...
- 2013区域赛长沙赛区现场赛 K - Pocket Cube
K - Pocket Cube Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
随机推荐
- 寒哥细谈之AutoLayout全解
文/南栀倾寒(简书作者)原文链接:http://www.jianshu.com/p/683fbcbfb705著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 看到群中好多朋友还停留在Fr ...
- Android--获取当前系统的语言环境
private boolean isZh() { Locale locale = getResources().getConfiguration().locale; St ...
- android 4.0之前版本号出现JSONException异常
今天在调试解析server传过来的JSON数据时,在2.3.7的手机上报了以下这样一个异常. 08-07 22:00:29.597: W/System.err(7610): org.json.JSON ...
- Android-IM架构设计
###1. 架构总览 ###2. 模块介绍 ####2.1 协议封装与任务流程 #####1) 协议与任务的封装 a. 协议有协议头(协议头因为格式相同,被抽象出来)和协议体组成,协议有两类:请求协议 ...
- JavaScript 函数基础
1. JavaScript 函数基础 1. 定义方法 2. 函数的调用方法 3. 函数方法 apply : 将函数作为数组的方法来调用 将参数以数组形式传递给该方法 call : 将函数作为对象的 ...
- <经验杂谈>C#/.Net中xml的Serialization序列化与DeSerializetion反序列化
1.先讲概念:.Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializ ...
- IL(Intermediate Language)
释义: IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU ...
- ios开发必备第三方库
引言 作为iOS开发人员,在开发App的过程中怎么会不使用第三方库呢?相信没有App是不使用第三方库的! 网络库 网络库,这是开发必备,除非你的App玩单机.现在特别火也特别好用的网络库就数AFNet ...
- oc随笔四:NSString、NSNumber
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- hdu 1234
Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一行 ...