您的位置:首页 > 其它

QAQ &火星情报局 哥德巴赫猜想 logn素数判定

2017-08-11 17:47 274 查看
我对哥德巴赫猜想还是有点印象的。现代数学中1不在是素数。所以新的哥德巴赫猜想大致如下所述:(针对于大于2的数)

对于偶数,可以拆成两个素数的和。

对于奇数:

若是素数,就不再拆了。

若这个奇数可以拆成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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: