列表

详情


NC232529. Necklace of Beads

描述

给出红,绿,蓝3种颜色 的n个珠子,求能够组成多少个不同的项链。 (旋转 和 翻转后 相同的属于同一个项链)
下图是的一种合法情况。

输入描述

输入一个正整数

输出描述

输出一行表示答案。

示例1

输入:

4

输出:

21

示例2

输入:

5

输出:

39

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 468K, 提交时间: 2023-05-24 17:17:37

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;

i64 power(i64 a, i64 b) {
    i64 res = 1;
    while (b) {
        if (b & 1) {
            res *= a;
        }
        a *= a;
        b >>= 1;
    }
    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    i64 ans = 0;
    for (int i = 0; i < n; ++i) {
        ans += power(3, gcd(n, i));
    }
    if (n & 1) {
        ans += n * power(3, (n + 1) / 2);
    } else {
        ans += n / 2 * power(3, n / 2);
        ans += n / 2 * power(3, (n + 2) / 2);
    }
    ans /= 2 * n;
    cout << ans << '\n';
    return 0;
}

C++ 解法, 执行用时: 4ms, 内存消耗: 440K, 提交时间: 2022-05-25 21:57:49

#include<iostream>
#include<math.h>
using namespace std;
typedef long long LL;
LL gcd(LL a ,LL b)
{
    return b ? gcd(b , a % b) : a;  
}

int main()
{
    LL n;
    cin>>n;

    LL ans=0;
    for(LL i=1;i<=n;i++)
    {
        LL k=gcd(i,n);
        ans=ans+pow(3,k);           
    }
    if(n%2==0)
        ans=ans+(n*pow(3,n/2)+3*n*pow(3,n/2))/2;
    else
        ans=ans+n*pow(3,(n+1)/2);
    ans=ans/(2*n);
    cout<<ans<<endl;
    return 0;
    
}

Python3 解法, 执行用时: 44ms, 内存消耗: 4636K, 提交时间: 2022-02-01 11:07:20

import math
n=int(input())

ans=0
for i in range(1,n+1):
    ans+=3**math.gcd(i,n)

if(n%2==0):
    ans+=2*n*(3**(n//2))
else:
    ans+=n*(3**((n-1)//2+1))

ans//=(2*n)

print(ans)

上一题