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 ...
随机推荐
- JavaScript 之 call apply bind
关键字 this 绑定的方法 this的动态切换,固然为JavaScript创造了巨大的灵活性,但也使得编程变得困难和模糊.有时,需要把this固定下来,避免出现意想不到的情况.JavaScript提 ...
- OC特有语法-分类(category)
本文转载Keefo. Objective-C的Object-oriented programming特性提供subclass和category这2个比较非常重要的部分.subclass应该反复被各种编 ...
- <经验杂谈>C#/.Net中xml的Serialization序列化与DeSerializetion反序列化
1.先讲概念:.Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializ ...
- JS高级程序设计学习笔记之RegExp类型
创建正则表达式: 字面量形式定义正则表达式: Var expression = / pattern /flags ;pattern部分可以使任意简单或复杂的正则表达式.每个正则表达式可以带有一个或多个 ...
- AutoMapper2
1.嵌套映射 namespace Second { class Program { static void Main(string[] args) { Mapper.CreateMap<Oute ...
- Angular源代码学习笔记-原创
时间:2014年12月15日 14:15:10 /** * @license AngularJS v1.3.0-beta.15 * (c) 2010-2014 Google, Inc. http:// ...
- C#扩展方法的理解
“扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.” 这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些 ...
- IIS报500.0错误
IIS安全里面配置:Everyone.IUSR.IIS_IUSRS 参考地址:http://blog.chinaunix.net/uid-21375345-id-3213631.html
- win7添加usb3.0驱动(错误代码1392,文件或目录损坏且无法读取)
Win7添加usb3.0驱动 之前一直按照网上的方法执行dism命令挂载时,总是失败,错误代码1392,显示原因是文件或目录损坏且无法读取.这个错误以前在装机时老是出现导致系统安装不成功,在BIOS中 ...
- table不能遗露了tbody
1.假如创建一个空表 ,然后去设置它的innerHTML,并获取表单的高度:在ie10及其他的浏览器中,会像预期一样正常被解析出来: <!DOCTYPE html> <html> ...