日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2017西安交大ACM小学期数论 [阅兵式]

發布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017西安交大ACM小学期数论 [阅兵式] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱兵式

發布時間: 2017年6月25日 12:53?? 最后更新: 2017年7月3日 09:27?? 時間限制: 1000ms?? 內存限制: 128M

描述

閱兵式上,將士們排成一個整齊的方陣,每個將士面朝前方。問正中心的將士能向前看到幾個將士?注意,一條直線上的將士會產生遮擋關系。


輸入

多組輸入數據(不超過10000組)。
每組數據一行一個正整數n,表示方陣的大小。
數據滿足n106n

輸出

每組數據輸出一行一個正整數,表示答案。

樣例輸入1 5 樣例輸出1 7

題解:由于這個具有很強的對稱性,所以我們只看一個三角形區域就可以了,把三角形區域的結果乘以4然后減去1就得到了總的答案。

三角形區域部分斜率的 種數計算方法如下:

橫坐標為1時候,縱坐標為1:1種

橫坐標為2時候,縱坐標為1:1種

橫坐標為3時候,縱坐標為1、2:2種

橫坐標為4時候,縱坐標為1、3:2種

我們可以知道橫坐標為x的時候,共有phi(x)種。其中phi是歐拉函數

這樣的話,只需要對歐拉函數求一個前綴和,就可以統計出三角形區域的斜率種數了!

代碼:

#include <stdio.h> #define MAXN 1000007 int minFactor[MAXN], phi[MAXN]; int prime[MAXN], primeNum; long long sum[MAXN]; void calPhi() {phi[1] = 1;for (int i = 2; i < MAXN; i++){if (!minFactor[i]){prime[primeNum++] = i;minFactor[i] = primeNum;phi[i] = i - 1;}for (int j = 1;; j++){int t = i * prime[j - 1];if (t >= MAXN)break;minFactor[t] = j;if (j == minFactor[i]){phi[t] = phi[i] * prime[j - 1];break;}phi[t] = phi[i] * (prime[j - 1] - 1);}} } int main(){calPhi();int n;sum[1] = 1;for(int i = 2;i < MAXN;i++){sum[i] = sum[i-1] + phi[i];}while(~scanf("%d",&n)){if(n == 1){puts("0");continue;}int t = n/2;long long res = sum[t];//求 一個三角形 printf("%lld\n",4*res-1);}return 0; }



總結

以上是生活随笔為你收集整理的2017西安交大ACM小学期数论 [阅兵式]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。