首页 > 其他分享 >Farey Sequence

Farey Sequence

时间:2024-04-07 09:04:58浏览次数:22  
标签:1000010 phi Sequence int long Farey varphi

多组测试数据,每组测试数据给你一个正整数 \(n\),让你求满足 \(\gcd(i,j) = 1\) 并且 \(1\le i < j \le n\) 的数对个数。

随便想一想,得出一个递推式:\(F_n = F_{n-1} + \varphi(n)\)。证明很简单:\(F_n\) 是包含 \(F_{n-1}\) 的,多出来的部分就是小于 \(n\) 并且和 \(n\) 互质的数的个数。而这一部分,就是 \(\varphi(n)\)。

递推初始条件:\(F_0=0\),这里举一个计算 \(F_3\) 的例子:

\[\begin{aligned} F_3 &= F_2+\varphi(3)\\ &= F_1+\varphi (2) +\varphi(3)\\ &=F_0+\varphi(1)+\varphi (2)+\varphi(3)\\ &=\varphi(1)+\varphi (2)+\varphi(3) \end{aligned}\]

所以我们得出结论:

\[F_n = \varphi (1) + \varphi (2) +\varphi (3) +\varphi (4) +\cdots +\varphi (n) \]

然后就非常快乐地开始写代码了。

#include<bits/stdc++.h>
#define int long long 
using namespace std;
long long Prime[1000010],phi[1000010];
bool vis[1000010];
long long cnt,n;
void init(int n)
{
	phi[1]=1;
	for(int i= 2;i<=n;i++){
		if(vis[i]==0){
			Prime[++cnt]=i;
			phi[i]=i-1;
		}
		for(int j=1;j<=cnt&&i*Prime[j]<=n;j++){
			vis[Prime[j]*i]=1;
			if(i%Prime[j]==0){
				phi[Prime[j]*i]=phi[i]*Prime[j];
				break;
			}
			else{
				phi[Prime[j]*i]=phi[Prime[j]]*phi[i];
			}
		}
	}
}
signed main(){
	init(1000005);
	while(1){
		long long n;
		cin>>n;
		if(n==0){
			return 0;
		}
		long long sum=0;
		for(int i=2;i<=n;i++){
			sum+=phi[i];
		}
		cout<<sum<<endl;
	}
}

标签:1000010,phi,Sequence,int,long,Farey,varphi
From: https://www.cnblogs.com/zxcqwq/p/18118307

相关文章

  • ANSI 转义序列(ANSI Escape Sequences)
    本文来自GithubGistfrom"fnky/ANSI.md"。下面是笔者翻译版本。持续更新中。ANSI转义序列标准Esc代码以Escape为前缀:Ctrl快捷键:^[八进制:\033Unicode:\u001b十六进制:\x1B十进制:27后面跟着命令,有时用左方括号([)分隔,称为控制序列引导码(CSI),后面可选地跟着......
  • #线段树,模拟费用流#CF280D k-Maximum Subsequence Sum
    题目给定一个大小为\(n\)的序列,要求支持单点修改和查询区间内至多\(k\)个不交子区间之和的最大值(可以不取)分析考虑源点向每个点、每个点向汇点流流量1费用0的边,每个点向右边的点流流量1费用\(a_i\)的边,流量最大为\(k\),这样构建出一个费用流的模型。很显然,退流相当于给区......
  • LeetCode in Python 300. Longest Increasing Subsequence (最长递增子序列)
    求最长递增子序列是深度优先搜索(DFS)的一种应用,有两种比较好的方法可以解决。第一种是动态规划法,时间复杂度为O(n*n),即设置边界条件和更新迭代公式求解最优解。第二种使用二分查找将时间复杂度降为O(nlogn)。本文给出两种方法的实现代码及说明。示例:图1最长递增子序列输入......
  • CF1924D Balanced Subsequences 题解
    先判掉\(k>\min(n,m)\)的情况。首先有个明显的计算最长合法括号子序列的贪心方法:初始一个值为\(0\)的计数器,从左到右枚举每个字符,遇到(时将计数器加一,遇到)时如果计数器不为\(0\)就减一然后将答案加一。考虑绘制它的折线图。初始时纵坐标为\(0\),从左到右枚举每个字符......
  • AttributeError: module ‘collections‘ has no attribute ‘Sequence‘
    在Python3.10及其以后的版本中,collections 模块中的 Sequence 类已经被移动到了 collections.abc 子模块中。这是因为在Python3.3版本时,collections.abc 就被引入作为抽象基类(ABCs)的正式家园,而 collections 模块本身被设计为主要包含具体的容器类型(如 deque 和 Co......
  • 详解数仓对象设计中序列SEQUENCE原理与应用
    本文分享自华为云社区《GaussDB(DWS)对象设计之序列SEQUENCE原理与使用方法介绍》,作者:VV一笑。1.前言适用版本:8.2.1及以上版本序列SEQUENCE用来生成唯一整数的数据库对象,本文对序列SEQUENCE的使用场景、使用方法及相关函数进行了介绍,并针对序列SEQUENCE在使用中容易遇到的问......
  • openGauss中的sequence跟Oracle的sequence有什么区别?
    openGauss中的sequence跟Oracle的sequence有什么区别?openGauss中也提供了sequence序列功能,使用Oracle的用户应该都非常喜欢使用这个功能。所以如果从Oracle迁移到openGauss,那么这项功能可以完全替代了。接下来我们简单测试一下:enmotech=>droptabletest;DROP......
  • [hdu6647]Bracket Sequences on Tree 解题报告
    oj:https://gxyzoj.com/d/hzoj/p/3575因为自己的脑残原因,调了8个小时啊!!!切入正题Part1假定1为根,可以发现,如果u的两棵子树同构,则他们遍历的顺序不影响答案所以,就可以将子树按哈希值分类,这道题就变成了一个可重复组合问题,设\(f_i\)表示以1为根时i的方案数,\(a_i\)表示某一种哈......
  • Link with Monotonic Subsequence(分块,思维)
    First,let'sreviewsomedefinitions.Feelfreetoskipthispartifyouarefamiliarwiththem.Asequence aaaisanincreasing(decreasing)subsequenceofasequence bbbif aaacanbeobtainedfrom bbbbydeletionofseveral(possibly,zeroorall)......
  • CF1922E Increasing Subsequences
    一个显然的思路就是构造很多互不相关的上升序列。但是这样构造出来的\(n\)是\(O(\log_2^2n)\)量级的,所以需要考虑新做法。假设我们本来有一个上升序列,我们能否往里面插数?如果插入的数前面本来有\(x\)个数,那么它有\(2^x\)的贡献。于是容易想到先写一个最大的上升序列,再二......