博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【求和】题解
阅读量:5124 次
发布时间:2019-06-13

本文共 919 字,大约阅读时间需要 3 分钟。

题目

题目描述

若两个数的最大公约数为1,则这两个数互质。现在给出一个正整数N(1<=2^31-1),你的任务是求出1~N中与N互质的数的总和。

输入

一个整数N

输出

一个整数sum,表示1~N中与N互质的数的总和。

样例输入

10

样例输出

20

分析

解法一

套公式:ans=N*phi(N)/2

#include 
#include
#include
#include
#include
#include
using namespace std;long long zs[1000],m,ans,m2[20];long long s;int main(){ long long k,p,l,n,tot; scanf("%lld",&n); int i,j; ans=(1+n)*n/2; tot=0; int nn=n; for(i=2;i<=int(sqrt(n))+1;i++) { if(n%i==0) { zs[++tot]=i; while(n%i==0) { n/=i; } } } //以上是求质因数 if(n>1) { zs[++tot]=n; } s=nn; for(i=1;i<=tot;i++) { s=(zs[i]-1)*s/zs[i]; } s=s*nn/2; printf("%lld",s);}

解法二

假设S为1~N的总和,P为与N互质的数的总和(即答案),Q为不与N互质的数的总和,则P=S-Q;

显然S=(1+N)*N/2,我们就可以通过求出Q来的得出P。
首先求出N所有的质因数,再根据容斥原理就可以很轻松的求出Q。
再因为:

2*3*5*7*11*13*17*19*23=223092870
maxN

所以N质因数的个数不会超过9个,即容斥原理不会超时。

转载于:https://www.cnblogs.com/chen1352/p/9008472.html

你可能感兴趣的文章
Python简介
查看>>
VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)
查看>>
React Native 开发环境搭建
查看>>
冒泡排序
查看>>
python全栈学习总结三:函数学习
查看>>
【4.0】jdbcTemplate
查看>>
redis 分布式锁实现
查看>>
屏幕尺寸
查看>>
android中实现简单的播放
查看>>
http和https协议
查看>>
HDOJ 4253 Two Famous Companies 二分+MST
查看>>
CSE2DBF 2019
查看>>
BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
查看>>
java保留两位小数
查看>>
滚动侦测scrollspy
查看>>
Navicat 连接MariaDB 失败: Host '*' is not allowed to connect to this MariaDB server
查看>>
条件、循环、函数定义 练习
查看>>
Sql语句之递归查询
查看>>
模式(一)javascript设计模式
查看>>
关于构造函数和this调用的思考
查看>>