GCD - Extreme (II) UVA - 11426 欧拉函数与gcd
2024-09-07 01:45:22
题目大意: 累加从1到n,任意两个数的gcd(i,j)(1=<i<n&&i<j<=n)。
题解:假设a<b,如果gcd(a,b)=c。则gcd(a/c,b/c)=1。也就是说a/c和b/c互质,而与a/c互质的数一共有oula(a/c)个,也就是说这里的b/c一共有oula(a/c)种选择,同理,gcd(a,b)=c,a的选择就会有,oula(b/c)种。
所以 gcd(x,y)=1 ,枚举每一个x,然后在枚举x的k倍,答案就是ans[x*k]+=oula(x)*k。最后再求一下去前缀和就行了。
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=+;
const ll N=+;
ll sum[N];
ll ans[N];
ll p[N];
void oula(){
ll i,j;
for(i=; i<=maxn; i++)
p[i]=i;
for(i=; i<=maxn; i+=)
p[i]/=;
for(i=; i<=maxn; i+=)
if(p[i]==i)
{
for(j=i; j<=maxn; j+=i)
p[j]=(p[j]/i*(i-));
}
}
void solve(){ for(ll x=;x<maxn;x++)
for(ll i=;i*x<maxn;i++)
ans[i*x]=ans[i*x]+p[x]*i; for(ll i=;i<maxn;i++) ans[i]+=ans[i-];
}
int main(){
oula();
ll n;
solve();
while(cin>>n,n) cout<<ans[n]<<endl;
return ;
}
最新文章
- 搭建Kafka集群(3-broker)
- js中的深复制和浅复制
- webform注册和Repeater
- 2D Skeletal Animation Ready
- linux shell expr 使用
- 零基础Android学习笔记-03 窗口间的数据传递
- android中给TextView或者Button的文字添加阴影效果
- (Android)View.getHeight或getWidth为0时的一些解决方案
- 深入了解View实现原理以及自定义View详解
- LayoutInflater类详解
- Zepto.js入门介绍
- POI tools 参数化生成excel表格
- 洛谷 [P1341]无序字母对
- 【MM系列】SAP的库存管理
- content字符生成配合CSS3 animation的点点点loading
- 读QT5.7源码(三)Q_OBJECT 和QMetaObject
- Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
- Mybatis 返回插入的主键
- netstat命令的安装
- Leetcode 78
热门文章
- hdu3336 Counting the string kmp的next数组的应用
- [AI开发]零代码公式让你明白神经网络的输入输出
- nmap端口扫描工具安装和使用方法
- 一文上手Tensorflow2.0之tf.keras(三)
- [Java8教程]Java8新特性进阶集合
- Selenium系列(十六) - Web UI 自动化基础实战(3)
- CentOS76 安装k8s1.18的简单步骤
- 俩个对象的hashCode()相同,则equals()也一定为true,对吗?
- 分享一款一直在维护的【网络开发运维|通用调试工具】: http请求, websocket,cmd, RSA,DES, 参数签名工具,脚本批量生成工具,google动态口令,端口检测,组件注册,js混淆...
- 使用jdbc实现简单的mvc模式的增删改查