hdu 1286

***这道题其实就是一个欧拉函数***

分解质因子部分

for(i=2; i<=n; i++)
{
    while(n%i==0)
    {
        n/=i;
        printf("%d%c", i, n==1 ? ‘\n‘ : ‘ ‘);
    }
}

快速求素因子,这个代码比上一个稍微快一点

for(i=2; i*i<=n; i++)
{
    while(n%i==0)
    {
        n/=i;
        printf("%d ", i);
    }
}
if(n>1)
        printf("%d", n);
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<queue>
#include<vector>
#include<algorithm>

using namespace std;
typedef long long LL;
#define N 100010
#define INF 0x3f3f3f

int main()
{
    int T, n, f, ans;
    scanf("%d", &T);

    while(T--)
    {
        scanf("%d", &n);
        ans=n;
        for(int i=2; i*i<=n; i++)
        {
            f=-1;
            while(n%i==0)
            {
                f=i;
                n/=i;
            }
            if(f!=-1)
            ans=ans*(i-1)/i;
        }
        if(n>1)
            ans=ans*(n-1)/n;
        printf("%d\n", ans);
    }
    return 0;
}
时间: 2024-10-10 16:57:05

hdu 1286的相关文章

HDU 1286 找新朋友(欧拉函数模板)

HDU 1286 找新朋友 题意:中文题. 思路:欧拉函数的纯模板题,没什么好说的,主要是理解欧拉函数的意义. 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等. 例如φ(8)=4,因为1,3,5,7均和8互质.   ----by度娘. #include <stdio.h> int eular(int n){ int ret = 1; for(int i = 2; i*

HDU 1286:找新朋友(欧拉函数)

http://acm.hdu.edu.cn/showproblem.php?pid=1286 题意:中文. 思路:求欧拉函数. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define N 33000 6 int is_prime[N], prime[N], phi[N]; 7 8 void Euler() { 9 int n = 32

找新朋友 hdu 1286

http://acm.hdu.edu.cn/showproblem.php?pid=1286 分析:与会长的编号(N)有大于1的公约数则为老朋友,让你求新朋友的个数.那么新朋友肯定是与会长的编号(N)互质的数了. 注意:一般做法都会超时.这时候就需要用到欧拉函数了. 欧拉函数:        (求出一个数n与1~n之间互质的个数):找到n的一个质因子i,那么1~n中与n的公约数是i的倍数的概率pi = 1/i,那么与n的公约数不是i的倍数(这些数可能就是与n互质的数)概率为1-pi,即(i-1)

hdu 1286 找新朋友

题意:求一个数约数为1的个数. 思路:裸裸的欧拉函数. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int eular(int n) { int ans=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { ans-=ans/i; while(n%i==0){ n/=i; } } } if(n>1) ans-=ans/n;

HDU 1286 欧拉函数。

[科普]什么是BestCoder?如何参加? 找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8077    Accepted Submission(s): 4250 Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是

欧拉函数hdu——————1286

现在先来解释下欧拉函数的的定义: 就是  正整数n里  小于N且与N互质(gcd为1)的数. (度娘:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等. 例如φ(8)=4,因为1,3,5,7均和8互质.) Problem Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,

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

题意:你懂得. 析:一看这个题应该是欧拉phi函数,也就说欧拉phi函数是指求从 1 到 n 中与 n 互素的数的个数,这个题很明显是这个意思嘛,不多说了. 代码如下: #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 32768 + 5; int phi[maxn+5]; void phi_table(int n){ memset

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

Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来. Input 第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数. Output 对于每一个N,输出一行新朋友的人数,这样共有CN行输出

HDU - 1286 找新朋友(欧拉函数)解题

找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13024    Accepted Submission(s): 6941 Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有