QAQ &火星情报局 哥德巴赫猜想 logn素数判定
2017-08-11 17:47
274 查看
我对哥德巴赫猜想还是有点印象的。现代数学中1不在是素数。所以新的哥德巴赫猜想大致如下所述:(针对于大于2的数)
对于偶数,可以拆成两个素数的和。
对于奇数:
若是素数,就不再拆了。
若这个奇数可以拆成2和一个素数,那么这个数就可以拆成两个素数的和。
否则,剩余的一般奇数可以拆成3个素数的和。
不解释。
代码中有O(logn)的素数判定方法。
河南省多校连萌(三)C题
Welcome To HPU Online Judge!
提交: 182 解决: 22
[提交][状态][论坛]
喜欢“一言不合就飙车”的宇哥,喜欢“再扯的提案都能升华为鸡汤”的汪涵局长....当然也喜欢的里面各种各样奇葩有趣的提案.....
最近 K 星颁布了一项新的法律,所有 K 星的公民必须缴纳的所得税是收入
,做为一名 ACMer QAQ~敏锐的发现可以把
“我发现...” 想想都很酷...,当然 QAQ 若想在世界都在看的火星上面提案是要通过多才多艺的”大家“的考核的,考核如下 :给出一个人的收入
接下来 TT 行,每行一个人的收入
:
对于偶数,可以拆成两个素数的和。
对于奇数:
若是素数,就不再拆了。
若这个奇数可以拆成2和一个素数,那么这个数就可以拆成两个素数的和。
否则,剩余的一般奇数可以拆成3个素数的和。
不解释。
代码中有O(logn)的素数判定方法。
#include <iostream> #include <cmath> using namespace std; long long pow_mod(int a, long long d, long long mod) { long long res = 1, k = a; while(d) { if(d & 1) res = (res * k) % mod; k = k * k % mod; d >>= 1; } return res; } bool test(long long n, int a, long long d) { if(n == 2) return true; if(n == a) return true; if((n & 1) == 0) return false; while(!(d & 1)) d = d >> 1; long long t = pow_mod(a, d, n); while((d != n - 1) && (t != 1) && (t != n - 1)) { t = t * t % n; d <<= 1; } return (t == n - 1 || (d & 1) == 1); } bool isPrime(long long n) { if(n < 2LL) return false; int a[] = {2, 3, 61}; for (int i = 0; i <= 2; ++i) if(!test(n, a[i], n - 1)) return false; return true; } int main() { ios::sync_with_stdio(false); int T; //for (int i = 2; i <= 100; ++i) if (isPrime(i)) cout << i << " "; //debug cin >> T; while(T--) { long long num; cin >> num; cout << ((num % 2 = 0) || isPrime(num) ? 1 : 2) << endl; } return 0; }
河南省多校连萌(三)C题
Welcome To HPU Online Judge!
问题 C: QAQ & 火星情报局
时间限制: 1 Sec 内存限制: 128 MB提交: 182 解决: 22
[提交][状态][论坛]
题目描述
QAQ~超级喜欢看火星情报局,每周六都是他一周中最期待的一天,QAQ喜欢和自己一样心愿是“世界和平”的薛之谦,喜欢“一言不合就飙车”的宇哥,喜欢“再扯的提案都能升华为鸡汤”的汪涵局长....当然也喜欢的里面各种各样奇葩有趣的提案.....
最近 K 星颁布了一项新的法律,所有 K 星的公民必须缴纳的所得税是收入
money的最大因子
o且 ( o≠moneyo≠money )
,做为一名 ACMer QAQ~敏锐的发现可以把
money拆分成若干个数的和(注 :拆分的数里不能出现
1)从而缴纳更少的所得税,当然这也是允许的,做为一名正直,勇敢,又充满正能量的 ACMer,K 决定把这个发现告诉火星情报局,以帮助 K 星完善这一新的法律。
“我发现...” 想想都很酷...,当然 QAQ 若想在世界都在看的火星上面提案是要通过多才多艺的”大家“的考核的,考核如下 :给出一个人的收入
money,输出在 K 星该人可以缴纳的最少的所得税...为了帮助 QAQ 在火星顺提案你能帮他打下助攻吗?
输入
第一行一个数 TT ( 1≤T≤10001≤T≤1000),表示T组测试数据
接下来 TT 行,每行一个人的收入
money( 2≤money≤10122≤money≤1012,注
:
money大部分是 106106 以内的数)
输出
对于每个money输出在 K 星可以缴纳的最少的所得税
样例输入
3258样例输出
112提示
2除自身的最大因子是
1,输出为
1
5除自身的最大因子是
1,输出为
1
8可以分成
3+5,
3除自身的最大因子是
1,
5除自身的最大因子是
1,所以输出为
1+1=2
相关文章推荐
- 哥德巴赫猜想,2000以内的正偶数分解为两个素数之和
- 写段代码验证哥德巴赫猜想之一:求给定范围的素数。
- 哥德巴赫猜想之一:是任何一个大于5的偶数都可以表示为两个素数之和(C语言)
- Miller-Rabin素数判定O((logn)^2)
- CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想
- PAT basic 1007 : 素数对猜想
- 1007. 素数对猜想 (20)
- 1007 素数对猜想
- 1007. 素数对猜想 (20)
- 素数判定 因子之和
- Miller-Rabin算法 codevs 1702 素数判定 2
- 1007. 素数对猜想 (20)
- HDOJ 2012 素数判定
- 1007. 素数对猜想
- 素数判定 费马测试
- 素数判定
- 指定范围的素数判定【杭电2012】 附题
- PAT 乙级1007. 素数对猜想 (JAVA版)
- c++ 哥德巴赫猜想
- 1007. 素数对猜想 (20) c++