传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=1286

找新朋友

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14909    Accepted Submission(s): 7936

Problem Description
新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。
 
Input
第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。
 
Output
对于每一个N,输出一行新朋友的人数,这样共有CN行输出。
 
Sample Input
2
25608
24027
 
Sample Output
7680
16016
 
Author
SmallBeer(CML)
 
分析:
欧拉公式(第一次接触)!
在数论,对正整数n,
欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。
 
方法1:正统的欧拉函数
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int eular(int n)//欧拉函数
{
int ret=,i;
for(i=;i*i<=n;i++)
{
if(n%i==)
{
n/=i,ret*=i-;
while(n%i==) n/=i,ret*=i;
}
}
if(n>) ret*=n-;
return ret;
}
int main ()
{
/*
在数论,对正整数n,
欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。
*/
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
printf("%d\n",eular(n));
}
return ;
}

第二种方法:标记法(实际上还是欧拉函数的思想)

对于n(如25608),

用一个大小等于n的bool数组记录是不是新朋友。

找出它所有因子x,并且把x的倍数全标记为1.

最终标记为0的就是新朋友

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define max_v 32770
int main ()
{
/*
对于n(如25608),
用一个大小等于n的bool数组记录是不是新朋友。
找出它所有因子x,并且把x的倍数全标记为1.
最终标记为0的就是新朋友
*/
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int a[n+];
memset(a,,sizeof(a));
for(int i=;i<=n/;i++)
{
if(n%i==)
{
for(int j=i;j<n;j+=i)
{
a[j]=;
}
}
}
int c=;
for(int i=;i<n;i++)
{
if(a[i]==)
c++;
}
printf("%d\n",c+);
}
return ;
}

HDU 1286 找新朋友 (欧拉公式或者标记法(其实就是欧拉公式的思想))的更多相关文章

  1. hdu 1286:找新朋友(数论,欧拉函数)

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

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

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

  3. hdu 1286 找新朋友 (欧拉函数)

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

  4. HDU——1286找新朋友(欧拉函数+质数打表)

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

  5. hdu 1286 找新朋友 (欧拉函数)

    Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的 ...

  6. hdu 1286 找新朋友 (容斥原理 || 欧拉函数)

    Problem - 1286 用容斥原理做的代码: #include <cstdio> #include <iostream> #include <algorithm&g ...

  7. HDU 1286 找新朋友

    题解:分析题目,就是一个裸的欧拉函数,于是AC. #include <cstdio> int eular(int n){ int ret=1,i; for(i=2;i*i<=n;i+ ...

  8. HDU 1286 找新朋友 (欧拉phi函数打表)

    题意:你懂得. 析:一看这个题应该是欧拉phi函数,也就说欧拉phi函数是指求从 1 到 n 中与 n 互素的数的个数,这个题很明显是这个意思嘛,不多说了. 代码如下: #include <io ...

  9. hdu 1286 找新朋友(欧拉函数)

    题意:欧拉函数 思路:欧拉函数 模板,代码略.

随机推荐

  1. Binder or AIDL的最简单实践

    1.前言: 在Android开发中多进程的合理使用+进程间通信的IPC是一个比较难的点.特别是Android特有的Binder机制,非常复杂,对于应用层开发的初级开发工程师强求深入理解Binder机制 ...

  2. python decode和encode

    摘抄: 字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符解码(decode)成unicode,再从unicode编码 ...

  3. 单例模式的c++实现

    #pragma once #include <iostream> #include <memory> #include <Windows.h> using name ...

  4. 重构指南 - 为布尔方法命名(Rename boolean method)

    如果一个方法中包含多个布尔类型的参数,一是方法不容易理解,二是调用时容易出错. 重构前代码 public class BankAccount { public void CreateAccount(C ...

  5. 第8章 CSS3中的变形与动画(上)

    变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中心顺时 ...

  6. Python-常用模块2

    今天我们继续来看模块的那些事儿 一.os模块 所有和操作系统相关内容都在os模块 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('d ...

  7. 为TextView增加onclick

    必须添加上 android:clickable="true"

  8. Java数字和字符串的相互转换(BigDecimal的使用)

    String s = "100."; double d1 = "1.23"; double d = Double.parseDouble(s); s = Str ...

  9. 使用github参与到开源项目的维护

    参与到开源项目的维护工作一般分两种,一种是由项目建立者拉入到贡献者列表中,拥有对项目的读写权限,而普通用户对项目仅有读取权限,另一种是fork项目到自己仓库,然后把修改后的内容发送给项目管理者者请求合 ...

  10. mybatis支持的jdbc类型

    参考mybatis的枚举JdbcType源码: 关于这些类型mybatis是如何处理可以看一下TypeHandler类的源码.