1. 程式人生 > >bzoj5193 [Usaco2018 Feb]Cow Gymnasts(數學)

bzoj5193 [Usaco2018 Feb]Cow Gymnasts(數學)

我們考慮n個臺子上的牛最少的一個臺子上有m只,記這個臺子為i,則對於所有的ji(modg),g=gcd(N,m),臺子j上的牛也必為m只。其餘臺子上的牛最多m+1只,且具有周期性,即以g為週期。具體證明請參見官方題解:傳送門

因此對於最少的牛數為m(m< n)的情況,我們一共有2gcd(N,m)1種方案。
m=n時,只有1種方案。
因此我們的答案就是ANS=12N+Nm=12gcd(m,N)
考慮列舉gcd g,

ANS=12N+gN2gφ(Ng).
我們可以O(n)的列舉n的質因數,然後dfs列舉g。
利用以下公式計算尤拉函式:
φ(x=pe11pe2
2
peii)=x(p11)(p21)(pi1)p1p2pi.

複雜度應該就是n的因子個數*logn級別,也就是O(nlogn)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 100010
#define mod 1000000007
inline ll read(){
    ll x=0
,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } ll n,ans=0; vector<ll>p; vector<int>e; inline int ksm(int base,ll k){ int res=1; for(;k;k>>=1,base=(ll)base*base%mod) if
(k&1) res=(ll)res*base%mod;return res; } void dfs(int cnt,ll g,ll mul1,ll mul2){//mul1--(pi-1)*(pj-1) mul2--(pi)*(pj) if(cnt==p.size()){ if(g==1) return; ans+=(ll)ksm(2,n/g)*(g/mul2%mod*mul1%mod)%mod;ans%=mod;return; }dfs(cnt+1,g,mul1,mul2);mul1=mul1*(p[cnt]-1)%mod;mul2*=p[cnt]; for(int i=1;i<=e[cnt];++i) g*=p[cnt],dfs(cnt+1,g,mul1,mul2); } int main(){ // freopen("gymnasts.in","r",stdin); // freopen("gymnasts.out","w",stdout); n=read();ll x=n; for(int i=2;(ll)i*i<=n;++i){ if(x%i) continue;p.push_back(i);int tot=0; while(x%i==0) x/=i,tot++; e.push_back(tot); }if(x>1) p.push_back(x),e.push_back(1); dfs(0,1,1,1); ans=(ans+1-(n-1))%mod;if(ans<0) ans+=mod; printf("%lld\n",ans); return 0; }

相關推薦

bzoj5193 [Usaco2018 Feb]Cow Gymnasts數學

我們考慮n個臺子上的牛最少的一個臺子上有m只,記這個臺子為i,則對於所有的j≡i(modg),g=gcd(N,m),臺子j上的牛也必為m只。其餘臺子上的牛最多m+1只,且具有周期性,即以g為週期。具體證

bzoj5194: [Usaco2018 Feb]Snow Boots 二分+並查集

Problem 有 nn 塊磚,上面有厚度為 aiai 的積雪 有 BB 雙靴子,他能走 didi 步,能走積雪小於 vivi 的積雪 Solution 我們可以對於每一雙靴子,將積雪量大於

bzoj5192 [Usaco2018 Feb]New Barns動態點分治

考試時傻掉了qaq,雖然是不斷加點,但是沒有強制線上,我們可以離線做,把樹的形態先搞出來,然後對最終的樹形態直接點分治,建出重心樹,然後考慮每次的加點操作為啟用這個點即可。 考慮我們如何找到距x最遠的啟用點,假設當前根為c。則答案就是x距c的距離再加上c的不含

HDU 5054 Alice and Bob數學

esp contain before mod see min roc axis factor 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5054 Problem Description Bob and A

HDU 5056 Boring count數學

log class == contain bold sea d+ const first 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5056 Problem Description You are given

SPOJ SUMPRO數學

strong 序列 分析 所有 枚舉 發現 個數 得到 題意 題意: 給出一個數N,問所有滿足n/x=y(此處為整除)的所有x*y的總和是多少。對答案mod(1e9+7)。 1 <= T <= 500。 1 <= N <= 1e9。 分析:

CodeForces - 375A Divisible by Seven數學

末尾 net true namespace 數學 位置 字符串 根據 ring https://vjudge.net/problem/48715/origin 題意:給出必定含1689四個數字的字符串,隨意交換位置構造出能被7整除的數。 分析:數學思維題。觀察發現1689的

HDU 5073 Galaxy 數學

ext erro include lar 分享 suppose eat real imu Galaxy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)

HDU - 5073 Galaxy數學

turn -a min print mes tps div 完成 return 題目 題意:n個點,運行移動k個點到任何位置,允許多個點在同一位置上。求移動k個點後,所有點到整體中心的距離的平方和最小。 分析:這題題目真的有點迷。。。一開始看不懂。得知最後是選取一個中心

51 Nod 1247 可能的路徑數學

ble 中間 end html 證明 algorithm logs col 路徑 題目鏈接:點我點我 題意:中文題 題解:一位大佬寫了一段很精妙的證明(轉): 給個不太嚴謹的證明思路: 第一步:證明路徑可逆,也就是如果(a, b) -> (x, y)可行,則(

Sumsets數學

sum urn single 情況 arc mman num align 分解因子 Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 14964

CF 899D Shovel Sale數學

air deb visit bar ogr div -c hold long 題目鏈接:http://codeforces.com/problemset/problem/899/D 題目: There are n shovels in Polyc

2991:2011 數學

\n num include 同余 mes 算法 pre bit 數學 【題目描述】     已知長度最大為200位的正整數n,請求出2011^n的後四位。 【題目鏈接】     http://noi.openjudge.cn/ch0204/2991/ 【算法】     一

Gym - 100801D:Distribution in Metagonia 數學

unsigned clas 是個 ++ gym num 思路 c++ -- 題意:給定一個N,讓你把它拆成若幹個只含素因子2和3的數之和,且兩兩之間沒有倍數關系,比如10=4+6。 思路:即是2因子的冪遞增,3因子的冪遞減;或者反之。 對於當前N,我們拆分出的數為num

Leftmost Digit數學

ron number git int contain bsp for inpu namespace Description Given a positive integer N, you should output the leftmost digit of N

BZOJ- 3142:數列 數學

strong 分享圖片 長度 c++ style include 數量 差分 sin 題意:給出N,K,M,P。求有多少長度為K的序列A,滿足:(1)首項為正整數;(2)遞增數列;(3)相鄰兩項的差小於等於m;(4)最後一個數小於等於N。 思路:根據差分來算數量。

【oiClass 2122】神奇的項鏈數學

sof 空格 soft nbsp mic main pri 20px 數學 題目描述 笨笨有一條神奇的項鏈,為什麽說它神奇呢?因為它有兩個性質: 1. 神奇的項鏈可以拉成一條線,線上依次是N個珠子,每個珠子有一個能量值Ei; 2. 除了第一個和最後一個珠子,其他珠

探索數學矩陣快速冪快速乘

lld over long 技術分享 好想 二維 name i++ ans 一句話題意:三維空間劃分四維空間,最多能劃分成多少個部分。 我們直接想四維的不好想,但是一般這種題我們考慮從低維開始做起。 在經過手算之後我們可以發現: 設\(f(x)\)為零維(點)切一維(

【CF1068B】LCM數學

div amp pri stream color can con scan namespace 題意:給定b,求lcm(a,b)/a有幾種不同的取值 b<=1e10 思路:只有a取b的因子時答案兩兩不同 1 #include<cstdio> 2 #i

2018 Multi-University Training Contest 8 6397 Character Encoding數學

題意 給你k,用m個0到n-1的數字構成k的方案數 題解 程式碼 #include<bits/stdc++.h> #define N 200005 #define P pair<int,int> using namespace std; typedef