给整数N(1 ≤ N ≤ 1000000000),求小于N的与N不互素的所有正整数的和。

思路:1.用欧拉函数求出小于N的与N互素的正整数的个数;

   2.若 p 与 N 互素,则 N-p 必与 N 互素(若 N%p==0 ,则 ( N , N-p )=p);

   3.据此求出 小于N的与N互素的正整数 的和,用 小于N的所有正整数 的和减去之即可。

#include<iostream>
#include<cstdio>
using namespace std;
long long n,s,k;
int main()
{
while()
{
scanf("%lld",&n);
if(!n)break;
s=n;
int cn=n;
for(int i=;i*i<=cn;i++)
if(cn%i==)
{
s-=s/i;
while(cn%i==)cn/=i;
}
if(cn>)s-=s/cn;//为什么不是s--?
k=(n*(n-)/-s*n/)%;//不能是“s/2*n”,因为当n==2时,s==1
printf("%lld\n",k);
}
return ;
}

致命错误:由  2.  而以为 小于N的与N互素的正整数 的个数必是偶数。

不解处:cn最终的可能情况?

对模板的分析:

    for(int i=;i*i<=cn;i++)
if(cn%i==)
{
s-=s/i;
while(cn%i==)cn/=i;
}

视N为唯一分解状态(N=Pi^ai*……),则好理解while;

那么为什么是计数用的 s/i 作为被减去的值呢?

举例:30先把自己的10个3减去了,现在想减去自己的5的倍数的个数,又不能减去3*5的倍数;

   则30中5的倍数的个数=30/5;

   减去的10个3中5的倍数的个数=10/5;

   则剩余的20个数中5的倍数的个数=30 / 5 - 10 / 5 =( 30 - 10 ) / 5;

   故因为5的倍数在剩余总个数中占的比例不变,可以写s - = s / i;

HDU3501——欧拉函数裸题的更多相关文章

  1. POJ_2407 Relatives 【欧拉函数裸题】

    一.题目 Given n, a positive integer, how many positive integers less than n are relatively prime to n? ...

  2. poj 2407 欧拉函数裸题

    http://poj.org/problem?id=2407 题意:多组数据,每次输入一个数 ,求这个数的欧拉函数 int euler_phi(int n){//单个欧拉函数 int m=(int)s ...

  3. UVA 10820 欧拉函数模板题

    这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include&l ...

  4. POJ 2407 Relatives(欧拉函数入门题)

    Relatives Given n, a positive integer, how many positive integers less than n are relatively prime t ...

  5. hdu 1286 找新朋友 欧拉函数模版题

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  6. (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)

    题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...

  7. poj2407(欧拉函数模板题)

    题目链接:https://vjudge.net/problem/POJ-2407 题意:给出n,求0..n-1中与n互质的数的个数. 思路:欧拉函数板子题,先根据唯一分解定理求出n的所有质因数p1,p ...

  8. 数论 - 欧拉函数模板题 --- poj 2407 : Relatives

    Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 Descri ...

  9. hdu1286(找新朋友)&&POJ2407Relatives(欧拉函数模版题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1286 没什么好说的,模板题,主要是弄懂欧拉函数的思想. #include <iostream> #i ...

随机推荐

  1. python基础举例应用

    将下述两个变量的值交换s1='alex's2='SB's1,s2=s2,s1print(s1,s2) 判断下述结果msg1='alex say my name is alex,my age is 73 ...

  2. hmtl工具

    在线编辑器:http://runjs.cn/code 关注微信小程序

  3. 举例说明MySQL中的事务

    一.场景导入 现在有一张仓库表,仓库表中记录了每一个物品的数量,还有一张用户表,用户购买产品,仓库表的产品数量减少,而用户拥有产品的数量增加. 但是如果仓库中的产品数量不足时怎么处理? 例子: #仓库 ...

  4. Windows 下使用nginx命令启动

    http://wanganwu.blog.163.com/blog/static/7788722012322111417966/ Windows下Nginx的启动.停止等命令 在Windows下使用N ...

  5. Unity 3D Shader流水线

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  6. array的方法 没记住的

    reserve() 是倒叙: sort() 拍序,按字符编码排序,可以传一个参数 reduce() 实例:判断一个数组里参数的个数 var arr = ["apple"," ...

  7. POJ 3468:A Simple Problem with Integers(线段树区间更新模板)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 141093 ...

  8. Blender 曲线操作

    Curve (Bézier Versus NURBS)https://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Curve_and_Path_Mode ...

  9. [zoj4045][思维+dfs]

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4045 题意:给一棵树.这棵树有n个节点,问你这个图能不能分成k个分块.这个 ...

  10. 每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)

    一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象.所谓“对象序列化”: 简单一句话:使用它可以象存储文本或者数字一样简单的存储对象.一个应用是,程序在执行过程中突 ...