T66099 小xzy的数对 题解
2024-08-24 23:57:53
T66099 小xzy的数对
题目背景
老师带同学参加表演,要求学生两两一组表演,但有些学生一起会发生冲突,现在老师想知道有多少组学生分到一起时不会发生冲突。
题目描述
学生发生冲突当且仅当他们身上的编号有大于1的公因数。学生身上的编号是1~n。 输入n,输出有多少组学生分到一起时不会发生冲突。
我们认定11与任何数都互质。
输入输出格式
输入格式:
一个数,n
输出格式:
一个数,即答案 不过,还得将答案与一个伟大的模数19491001膜一下
输入输出样例
输入样例#1:
3
输出样例#1:
4
输入样例#2:
4
输出样例#2:
5
说明
n≤10^8
略读题目,求1~n中互质的对数,便可想到欧拉函数。
如何计算欧拉函数
long long getphi(){
int i=1;long long res=n;
while(n>1){
if(p[i]==0)break;
if(n%p[i]==0){
res=(res/p[i])*(p[i]-1);
while(n%p[i]==0)n/=p[i];
}
i++;
}
if(n>1)res=(res/n)*(n-1);
return res;
}
除此之外,我们也可以通过欧拉函数的积性,使用线形欧拉打表:
void get_phi(){
for(register int i=;i<=n;i++){
if(!v[i]){
prim[++id]=i;
phi[i]=i-;
}
for(register int j=;j<=id;j++){
if(i*prim[j]>n)break;
v[i*prim[j]]=;
if(i%prim[j]==){
phi[i*prim[j]]=(phi[i]*prim[j])%MOD;break;
}
else phi[i*prim[j]]=(phi[i]*(prim[j]-))%MOD;
}
}
}
打完表后,循环就可以啦:
#include <cstdio>
#include <bitset>
#include <iostream>
using namespace std;
const int MOD=;
int n;
bitset<> v;
int prim[],id,phi[]; void get_phi(){
for(register int i=;i<=n;i++){
if(!v[i]){
prim[++id]=i;
phi[i]=i-;
}
for(register int j=;j<=id;j++){
if(i*prim[j]>n)break;
v[i*prim[j]]=;
if(i%prim[j]==){
phi[i*prim[j]]=(phi[i]*prim[j])%MOD;break;
}
else phi[i*prim[j]]=(phi[i]*(prim[j]-))%MOD;
}
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("phi.in","r",stdin);
freopen("phi.out","w",stdout);
#endif
scanf("%d",&n);
get_phi();long long ans=;
for(int i=;i<=n;i++)ans=(ans+phi[i])%MOD;
cout<<ans<<endl;
return ;
}
最新文章
- Ehcache和Spring整合
- VMworld 2015 感受:VMware “Ready For Any”
- Java 语句总结
- HackerRank ";Bike Racer";
- sql server R2 下载地址收藏
- UIView与CALayer的区别,很详细
- 使用ANR-WatchDog来检測ANR
- 《火球——UML大战需求分析》(第1章 大话UML)——1.3 行为型的UML(Behavior Diagram)
- PeekMessage与GetMessage的对比
- win10下安装python
- 初学Python(二)——数组
- 浏览器抓包(post)
- awkOFS问题
- TensorflowTutorial_二维数据构造简单CNN
- getBoundingClientRect方法获取元素在页面中的相对位置
- 学习DButils笔记
- $_SERVER[&#39;HTTP_REFER&#39;] 和 session cookie 关系
- 【代码笔记】Web-Javascript-JavaScript简介
- JAVA NIO non-blocking模式实现高并发服务器(转)
- 横竖屏切换时不销毁当前activity 和 锁定屏幕
热门文章
- [Go] golang的接口合约
- Android Material Design控件使用(三)——CardView 卡片布局和SnackBar使用
- Spring(一)JdbcTemplate的环境搭建
- Building QGIS from source - step by step(随笔2)
- 通过Arcpy在ArcMap工具箱中添加脚本计算面图层的起终点坐标
- 35.Odoo产品分析 (四) – 工具板块(6) – 午餐管理(1)
- 小程序实践(十):textarea实现简单的编辑文本界面
- 会话固定攻击 - yxcms session固定漏洞
- Ubuntu下创建XFS文件系统的LVM
- c/c++ 继承与多态 由子类向父类的转换规则