Uva10294 Arif in Dhaka (置换问题)
生活随笔
收集整理的這篇文章主要介紹了
Uva10294 Arif in Dhaka (置换问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
繼續劉汝佳大白之旅,這次是北京站賽前學學數學問題。
雖然說比賽前臨時抱佛腳通常意義不大,不過表示即使短時間內用不上,但是只要給自己一點比賽前的壓力,確實學起來動力會足一些,即使被平時的各類大物實驗,電工實驗,計算機硬件實驗以及素描忙的夠嗆。
扯回正題,此題需要知道的是置換群的概念,這點在劉汝佳的書中寫的比較詳細,此處不多做贅述。此處多說一句的是第二種手鐲的情況。在下圖中“左圖順時針轉1個位置”和“右圖順時針旋轉5個位置”是相同的,所以在最終結果處需要(ans1+ans2)/2。
代碼:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; typedef long long LL; int n, t; //int prime[] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47}; long long pow_num[55]; int main() {while(~scanf("%d%d", &n, &t) && n) {memset(pow_num, 0, sizeof(pow_num));pow_num[0] = 1LL;for(int i = 1; i <= n; i++) {pow_num[i] = pow_num[i - 1] * (LL)t;}LL ans1 = 0LL, ans2 = 0LL;for(int i = 1; i <= n; i++) {ans1 += pow_num[__gcd(i, n)];}if(n % 2 == 1) {ans2 = n * pow_num[n / 2 + 1];} else {ans2 = n / 2 * pow_num[n / 2] + n / 2 * pow_num[(n - 2) / 2 + 2]; }cout<<ans1 / n<<" "<<(ans1 + ans2) / 2 / n<<endl;}return 0; }轉載于:https://www.cnblogs.com/gaoxiang36999/p/4451502.html
總結
以上是生活随笔為你收集整理的Uva10294 Arif in Dhaka (置换问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android提供的LruCache类简
- 下一篇: mysql里制造一个错误