書式#include <iostreamの> 書式#include <math.h>の使用して名前空間はstdを、#define LL長い長 LLのGCD(LL、LL b)は { 戻り B?GCD(B、%のB)。 } LLのポリA(LL n)で { LLのRET = 0 。 用(LL i = 0 ; iがn <I ++の) RETが + = POW(3 、GCD(I、N))。 // それらを反転... あれば(N - 1)// 奇数 RET + = N * POW(3、N / 2 + 1 ); // 対称軸のNUMは、n、及び(N + 1)/ 2のサイクル、2の長さ、及び1 ...他の長さの2サイクルである// もRET + = N / 2 * POW(3 、N / 2)+(N / 2)* POW(3、N / 2 + 1)。// 対称軸のnumがbeedを通して、彼らは(N / 2-1)2の長さを有するサイクルと1の長さの2サイクルを形成されたn / 2軸について、beedsによってcategoried、Nであり; beedを通して、彼らが形成されていないN / 2軸2の長さ(N / 2)サイクルの 他// も RET + = N / 2 * POW(3、N / 2)+(N / 2)* POW(3、N / 2 + 1)。// 戻り RET / N / 2 ; // (ポリア定理に従う。)、それらの平均 } int型のmain() { LL N。 一方 - (!CIN >> N && N = 1 ) { 場合(N <= 0)COUT << 0 << ; ENDL 他の coutの<<ポリA(n)が<< てendl; } 戻り 0 。 }
#include <iostreamの> する#include <cstdioを> する#include <cstdlib> の#include <CStringの> する#include <cmath> 使用して名前空間STD。 #define N 3 __int64 M。int型 GCD(INT A、INT B) { B = Bの%。 一方、(B) { =%のB; スワップ(A、B)。 } を返します。 } int型のmain() { 一方(scanf関数(" %のLLD " !、&M)= EOF) { 場合(Mの== - 1 ) ブレーク。 __int64 ANS = 0 。 用(int型 iは= 1 ; I <= M; iが++ ) ANS + = POW(N * 1.0、GCD(I、M)* 1.0 )。 もし(M 1 ) ANS + = M * POW(N * 1.0、(M / 2 + 1)* 1.0 )。 他 ANS + = M / 2 * POW(N *1.0、(M / 2)* 1.0)+ M / 2 * POW(N * 1.0、(M / 2 + 1)* 1.0 )。 ANS / = M * 2 。 printf(" %I64dの\ n " 、ANS)。 } 戻り 0 。 }
ます。https://www.cnblogs.com/zhangying/p/3993515.htmlで再現