ZOJ 3758 —— Singles' Day
2014-03-02 18:21
447 查看
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5203
给一个b和一个n,m就是写成b进制的n个1,然后如果m是质数就输出YES,否则NO。
由于b和n最多只有16,而m相当于1+b+b^2+...+b^(n-1) <b^n
就算b和n都取16也不会超过long long;
我的做法是先求出所有的取值:f[b]
;
这里可以递推,f[i][j] = f[i][j-1]*i+1
然后判断下f[b]
是否是质数保存到m[b]
中。
处理完之后就可以直接输出结果了。
PS:比赛的时候开始还在担心数字太大,处理会不会太慢,结果没想到预处理几乎不用什么时间,估计是这些数字里质数本来就不多吧。
给一个b和一个n,m就是写成b进制的n个1,然后如果m是质数就输出YES,否则NO。
由于b和n最多只有16,而m相当于1+b+b^2+...+b^(n-1) <b^n
就算b和n都取16也不会超过long long;
我的做法是先求出所有的取值:f[b]
;
这里可以递推,f[i][j] = f[i][j-1]*i+1
然后判断下f[b]
是否是质数保存到m[b]
中。
处理完之后就可以直接输出结果了。
PS:比赛的时候开始还在担心数字太大,处理会不会太慢,结果没想到预处理几乎不用什么时间,估计是这些数字里质数本来就不多吧。
#include<cstdio> #include<cmath> #include<cstring> long long f[20][20]; bool m[20][20]; int main(){ for(int i=1; i<=16; i++) f[i][1]=1; for(int i=2; i<=16; i++){ for(int j=2; j<=16; j++){ f[i][j] = f[i][j-1]*i+1; } } memset(m,0,sizeof(m)); for(int i=2; i<=16; i++){ for(int j=1; j<=16; j++){ if(f[i][j]==1) m[i][j]=1; for(int k=2; k<=(int)(sqrt(f[i][j])); k++){ if(!(f[i][j]%k)){ m[i][j]=1; break; } } } } int a, b; while(~scanf("%d %d", &a, &b)){ puts(m[a][b]?"NO":"YES"); } return 0; }
相关文章推荐
- ZOJ - 3758 - Singles' Day(素数判定)
- ZOJ 3758 Singles' Day
- ZOJ 3758 Singles' Day
- zoj 5194 Singles' Day
- zoj 3758 Singles' Day(暴力)
- zoj3758 Singles' Day
- zoj 3758 Singles' Day
- ZOJ3758:Singles' Day(快速素数判定法)
- ZOJ 3758 Singles' Day
- ZOJ 3758 — Singles' Day(C++)
- ZOJ 2646 Joseph's Problem
- ZOJ 3570 Lott's Seal 计算几何
- ZOJ Problem Set - 1108 FatMouse's Speed
- ABAP CALL FUNCTION 'DATE_GET_MONTH_LASTDAY' 取每月最后一天 'DATE_GET_WEEK'取周
- ZOJ--3631--Watashi's BG【枚举】
- [转贴]19 things to think about when you're having a bad day
- zoj 3696 Alien's Organ
- ZOJ 1813 Biker's Trip Odometer
- zoj 3696 Alien's Organ(泊松分布)
- zoj 3726& hdu 4791 Alice's Print Service