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 ;
}

最新文章

  1. Ehcache和Spring整合
  2. VMworld 2015 感受:VMware “Ready For Any”
  3. Java 语句总结
  4. HackerRank &quot;Bike Racer&quot;
  5. sql server R2 下载地址收藏
  6. UIView与CALayer的区别,很详细
  7. 使用ANR-WatchDog来检測ANR
  8. 《火球——UML大战需求分析》(第1章 大话UML)——1.3 行为型的UML(Behavior Diagram)
  9. PeekMessage与GetMessage的对比
  10. win10下安装python
  11. 初学Python(二)——数组
  12. 浏览器抓包(post)
  13. awkOFS问题
  14. TensorflowTutorial_二维数据构造简单CNN
  15. getBoundingClientRect方法获取元素在页面中的相对位置
  16. 学习DButils笔记
  17. $_SERVER[&#39;HTTP_REFER&#39;] 和 session cookie 关系
  18. 【代码笔记】Web-Javascript-JavaScript简介
  19. JAVA NIO non-blocking模式实现高并发服务器(转)
  20. 横竖屏切换时不销毁当前activity 和 锁定屏幕

热门文章

  1. [Go] golang的接口合约
  2. Android Material Design控件使用(三)——CardView 卡片布局和SnackBar使用
  3. Spring(一)JdbcTemplate的环境搭建
  4. Building QGIS from source - step by step(随笔2)
  5. 通过Arcpy在ArcMap工具箱中添加脚本计算面图层的起终点坐标
  6. 35.Odoo产品分析 (四) – 工具板块(6) – 午餐管理(1)
  7. 小程序实践(十):textarea实现简单的编辑文本界面
  8. 会话固定攻击 - yxcms session固定漏洞
  9. Ubuntu下创建XFS文件系统的LVM
  10. c/c++ 继承与多态 由子类向父类的转换规则