acm模版
發現 51no
d 上題號為
123∗
的幾個題連著都是杜教篩,儼然可以成為乙個模版搞搞了……但是我的數學水平實在有限,就算搞了模版怕是也無法靈活使用,所以想想也就算了。
其實早先我是不知道分塊具體是指什麼的,做了這幾道杜教篩的問題後,我算是搞明白這個,就是我們最後獲取的公式是乙個遞迴式,所以我們可以將整個問題劃分為兩部分,小的部分打表出來,而大的部分,可以依靠遞迴式來求解,當然,這也許只是我的乙個狹隘的認知,實在是對這些個概念懵懵懂懂的。la
tex 的公式寫的手抽筋兒,所以懶得再絮絮叨叨的寫一堆推導了,dance_in_the_dark』s blog 公式推導相當詳細,大牛說很容易就推出來了,這讓我這數學 zz
和公式恐懼症很尷尬啊……只能 or
z 一下了,希望有一天我也可以將自己的數學水平提高到不再畏懼~~~
#include
#include
#define ll long long
using
namespace
std;
const
int maxn = 1e6 + 5;
const
int mod = 1e9 + 7;
const
int inv_2 = 5e8 + 4;
ll pri[maxn];
ll vis[maxn];
ll phi[maxn];
ll h[maxn * 10];
ll f[maxn * 10];
ll n, ans;
int hash_(ll x)
return t;
}ll gphi(ll n)
ll x = hash_(n);
if (h[x])
ll t = n % mod;
ll k = t * (t + 1) % mod * inv_2 % mod;
for (ll i = 2; i <= n; i = t + 1)
k = (k % mod + mod) % mod;
h[x] = n;
f[x] = k;
return k;
}void init()
for (int j = 1; j <= pri[0]; j++)
vis[i * pri[j]] = 1;
if (i % pri[j] == 0)
else}}
for (int i = 1; i <= maxn; i++)
}int main()
printf("%lld\n", ans);
return
0;}
51nod 最大的最大公約數
這道題挺有意思,讓求最大的兩兩最大公約數,很顯然暴力直接做複雜度太高。可以利用試除法,列舉每乙個數的因子,如果某個因子出現超過了兩次,就可以進行判斷,因為題目要求兩兩。最大公約數一定是某個數的因子。include includeusing namespace std int cnt 50005 an...
51nod 1040 最大公約數之和
1040 最大公約數之和 rihkddd 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 給出乙個n,求1 n這n個數,同n的最大公約數的和。比如 n 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 15 input 1個數n ...
51nod1040最大公約數之和
題目大意 給出乙個n,求1 n這n個數,同n的最大公約數的和。比如 n 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 15 input 1個數n n 10 9 output 公約數之和 思路 將n分解質因子,每個質因子貢獻的是多少,累加求和。每個質因子貢獻的次數...