1. 程式人生 > >【“盛大遊戲杯”第15屆上海大學程式設計聯賽 J】【尤拉函式 約數尤拉函式之和為本身】

【“盛大遊戲杯”第15屆上海大學程式設計聯賽 J】【尤拉函式 約數尤拉函式之和為本身】

膜一下將帶給你好運

釋出時間: 2017年7月9日 18:17   最後更新: 2017年7月9日 21:05   時間限制: 1000ms   記憶體限制: 128M

尤拉函式ϕ(n)被定義1~n中與n互質的數的個數。例如ϕ(5)=4,因為1,2,3,4這四個數字與5互質。

定義f函式:

f(n)=i=233n233ϕ(i)[n/i]

其中[n/i]表示n除以i所得到的商

第一行一個整數T,表示測試組數。對於每組資料,輸入一行,包含一個數字n466<=n<=108

每組資料輸出一行,表示函式值f(n)1000000007取模

2
1068
972
293824
222698

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x, y) memset(x, y, sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b > a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b < a)a = b; }
const int N = 0, M = 0, Z = 1e9 + 7, inf = 0x3f3f3f3f;
template <class T1, class T2>inline void gadd(T1 &a, T2 b) { a = (a + b) % Z; }
int casenum, casei;
const int TOP = 1e8 + 10;
bool notprime[TOP];
int p[TOP / 5], pnum;
int euler[TOP];
//在O(n)時間複雜度內求得TOP範圍內所有數的尤拉函式
void Euler_All()
{
	euler[1] = 1;
	for (int i = 2; i < TOP; ++i)
	{
		if (!notprime[i])
		{
			p[++pnum] = i;
			euler[i] = i - 1;
		}
		for (int j = 1; j <= pnum && p[j] * i < TOP; ++j)
		{
			notprime[p[j] * i] = 1;
			if (i % p[j] == 0)
			{
				euler[p[j] * i] = euler[i] * p[j];
				break;
			}
			else euler[p[j] * i] = euler[i] * (p[j] - 1);
		}
	}
	for (int i = 1; i < TOP; ++i)
	{
		gadd(euler[i], euler[i - 1]);
	}
}
int Euler_Single(int n)
{
	int ans = n;
	for (int i = 2; i * i <= n; ++i)if (n % i == 0)
	{
		ans = ans - ans / i;
		while (n%i == 0)n /= i;
	}
	if (n > 1)ans = ans - ans / n;
	return ans;
}
int n;
int main()
{
	/*
	Euler_All();
	*/
	scanf("%d", &casenum);
	for (casei = 1; casei <= casenum; ++casei)
	{
		scanf("%d", &n);
		int ans = (LL)n * (n + 1) / 2 % Z;
		for (int i = 1; i < 233; ++i)
		{
			gadd(ans, Z - Euler_Single(i) * (n / i) % Z);
		}
		for (int i = n - 232; i <= n; ++i)
		{
			gadd(ans, Z - Euler_Single(i) * (n / i) % Z);
		}
		/*
		for (int l = 233, r; l <= n - 233; l = r + 1)
		{
			//[l, r]範圍的數,都是*[n / l]
			r = n / (n / l); gmin(r, n - 233);
			gadd(ans, (LL)(Z + euler[r] - euler[l - 1]) * (n / l) % Z);
		}
		*/
		printf("%d\n", ans);
	}
	return 0;
}
/*
【Trick && 吐槽】
一開始看不到給了多少空間
於是本來想的是預處理 + 下底函式分塊
然而空間不夠啦!

【題意】
http://acmoj.shu.edu.cn/problem/418/

【分析】
因為有性質——
	一個數的所有約數(包括自己)的尤拉函式之和,等於這個數本身的值
所以,
∑euler[i] * n / i
其實就是反著來考慮上面的性質,我們先考慮列舉每個數,考慮這個數作為約數的情況。
發現,對i的所有倍數,它作為約數時,都貢獻了一個euler[i],
即euler[i]貢獻了n / i次,於是,如果這個式子的積累區間是[1, n],結果就是n(n+1)/2
這道題我們只需要對前232和後233個數特殊處理去除就好啦!

去除可以是233*sqrt()求尤拉函式,也可以是用區間篩法——
for(int i=1;i<=N;i++)phi[i]=i;
for(int i=2;i<=N;i++)if(i==phi[i])//是素數
{
	for(int j=i;j<=N;j+=i)
	{
		phi[j]=phi[j]/i*(i-1);
	}
}

【時間複雜度&&優化】
O(233 * sqrt(1e8))
優化之後
O(233 * log級別)

*/


相關推薦

盛大遊戲15上海大學程式設計聯賽 J函式 約數函式之和本身

膜一下將帶給你好運 釋出時間: 2017年7月9日 18:17   最後更新: 2017年7月9日 21:05   時間限制: 1000ms   記憶體限制: 128M 描述 尤拉函式ϕ(n)被定義1~n中與n互質的數的個數。例如ϕ(5)=4,因為1,2,3,4

快速冪公式盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-新增好友

新增好友 時間限制: 1000ms   記憶體限制: 128M 描述 Tony最近喜歡上了龍之谷遊戲,所以他想叫上他的好友組建一個公會來一起享受這款遊戲。 Tony一共有n個好友,他可以叫上

盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-神無月排位賽

《神無月》作為盛大遊戲2017年的全新原創大作,其開發團隊在自研實力強大的傳世工作室基礎之上,還有美樹本晴彥等日本一線知名畫師及日本遊戲音樂大師崎元仁加盟參與制作。目前正在不限號內測中,有很多玩家進入到神無月的世界中。 在神無月中,有著玩家之間切磋的排位賽,其段位主要分為五大段位,從低到高依次為:新兵、菁英

SHU-“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-H-調和序列

ACM模版 描述 題解 暴力篩法預處理,注意坑點是,K 可能很大,大到比 n 還大,但是此時,序列中依然是有東西的,就是 A[0],也就是說,當訪問的 K 很大時,這個子序列中至少有一

戰鬥“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽

戰鬥 釋出時間: 2017年7月9日 20:20   最後更新: 2017年7月10日 21:11   時間限制: 2000ms   記憶體限制: 128M 描述 最近,盛大計劃開發一款手遊,

丟史蒂芬妮“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽

丟史蒂芬妮 釋出時間: 2017年7月9日 20:20   最後更新: 2017年7月10日 21:11   時間限制: 1000ms   記憶體限制: 128M 描述 有一天,空和白很無聊,決定玩盛大遊戲,考慮到兩個人玩,他們隨便掏了一個遊戲出來:在一個n∗m的棋盤上

(補題心路)——“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽

不知道該擺出什麼表情 別的比賽要腦細胞,這比賽要命 水題真的是送分送到家門口但是沒有這個命去交。。 熱身賽的時候只有最後十分鐘左右可以掙扎著交題 正式比賽的話就是,比賽5小時,掛機4小時,延時1小時……(延時的時候我實在是餓死了就去吃飯了,向仍然堅持做題

SHU-“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-I-丟史蒂芬妮

ACM模版 描述 題解 與其說是博弈論問題,不如說是偽裝成博弈論的記憶化搜尋問題,通過記憶化搜尋來預處理出來所有狀態,然後直接訪問即可。 程式碼 #include <

SHU-“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-A~K && M

ACM模版 這個比賽早就知道有,但是因為自己要騎行,結果就沒有註冊,後來騎行計劃延期,但是也忘了註冊,賽後重現賽嘗試做了 12 道,感覺水題比較多,剩下三個 AC 的人好少啊,感覺我這麼菜肯定也是做不出來,所以就先不補了吧…… A-黑白影象直方圖

SHU-“盛大遊戲15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽-J-膜一下將帶給你好運

ACM模版 描述 題解 這個題是一道推導題,推導過程如下: 首先,我們應該都知道的是 n=∑d|nphi(d) 所以呢,∑i=1ni=∑i=1n∑d|iphi(d) goon… ∑i

盛大遊戲15上海大學程序設計聯賽夏季賽暨上海高校金馬五校賽 C

一行 spa sizeof 聯賽 sin pre row span -s 時間過得好快啊,SHU計算機學院又有新的一批小朋友們進來了。2016級的同學想必也是非常喜歡計算機學院的,於是院長想測試一下大家對計算機的喜愛程度(院長大人別查我水表)。 院長給大家一行由大寫字母

盛大遊戲15上海大學程序設計聯賽夏季賽暨上海高校金馬五校賽 I

mat tail for 我們 大學 一行 ace 一個 ostream 有一天,空和白很無聊,決定玩盛大遊戲,考慮到兩個人玩,他們隨便掏了一個遊戲出來:在一個n?m 的棋盤上,首先把史蒂芬妮·多拉放在左上角(1,1) 的位置。每次一個人可以將她往下,往右,往右下丟

盛大遊戲15上海大學程序設計聯賽夏季賽暨上海高校金馬五校賽 G

class ati text sin 生命力 但是 %d nod cti 最近,盛大計劃開發一款手遊,以下是簡化版。系統和我方各有n 頭怪獸,每一頭怪獸都有生命值和攻擊力,並且當怪獸A攻擊怪獸B,如果怪獸B的生命值高於怪獸A的攻擊力,則怪獸B的生命力減少A的攻擊力的數

盛大遊戲15上海大學程序設計聯賽夏季賽暨上海高校金馬五校賽 F

con text mes namespace view spa label 子序列 cti 如果一個序列有奇數個正整數組成,不妨令此序列為a 1 ,a 2 ,a 3 ,...,a 2?k+1 (0<=k ),並且a 1 ,a 2 ...a k+1 是一個

15上海大學程式設計聯賽夏季賽

A:黑白影象直方圖 描述 在一個矩形的灰度影象上,每個畫素點或者是黑色的或者是白色的。黑色畫素點用1表示,白色畫素點用0表示。現在要求你編寫一個程式,計算每列上黑色畫素點的個數並輸出。如下圖所示是一個6∗8的黑板影象。 1 1 0 0 1 1 1 1

15上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽H

思路: 首先要知道:11+12+13+14+...++1n=ln(n)+C 然後就可以為所欲為【暴力吧!】 拿個優先佇列什麼的,或者直接num∗log∗(num) sort好像都行???? 程式

牛客網埃森哲十六上海大學程式設計聯賽春季賽暨上海高校金馬五校賽 題解

題目連線A.Wasserstein Distance(水題)題意:給你2行土a,b,每行都有n堆,每堆對應有a[i],b[i]克,我們可以對a中的土進行移動,移動任意堆的k克泥土到a中其他堆消耗的代價是

埃森哲十六上海大學程式設計聯賽春季賽暨上海高校金馬五校賽 EALFID

Ehttps://www.nowcoder.com/acm/contest/91/E按照題意 打個表 發現答案是2的n次方#include<bits/stdc++.h> using namespace std; int main(){ int n;

埃森哲十六上海大學程式設計聯賽春季賽暨上海高校金馬五校賽B合約數

題目描述 在埃森哲,員工培訓是最看重的內容,最近一年,我們投入了 9.41 億美元用於員工培訓和職業發展。截至 2018 財年末,我們會在全球範圍內設立 100 所互聯課堂,將互動科技與創新內容有機結合起來。按崗培訓,按需定製,隨時隨地,本土化,區域化,

埃森哲十六上海大學程式設計聯賽春季賽暨上海高校金馬五校賽 A

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 131072K,其他語言262144K 64bit IO Format: %lld 題目描述 最近對抗生成網路(GAN)很火,其中有一種變體WGAN,引入了一種新的距離來提高生成圖片的