zoukankan      html  css  js  c++  java
  • 找新朋友(欧拉函数)

    找新朋友

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

    传送门

    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
    欧拉函数:*******明天详细写,现在不写了
     1 #include<iostream>
     2 using namespace std;
     3 const int maxn=32790;
     4 int euler[maxn+2];
     5 void make()
     6 {
     7     euler[1]=0;
     8     for(int i=2;i<=maxn;++i)
     9         euler[i]=i;
    10     for(int i=2;i<=maxn;++i)
    11         if(euler[i]==i)
    12             for(int j=i;j<=maxn;j+=i)
    13                 euler[j]=euler[j]/i*(i-1);
    14 }
    15 int main()
    16 {
    17     make();
    18     int n,t,sum;
    19     cin>>t;
    20     while(t--)
    21     {
    22         cin>>n;
    23         cout<<euler[n]<<endl;
    24     }
    25     return 0;
    26 }

    另一种方法:

     1 #include <stdio.h>
     2 int gcd(int x,int y)
     3 {
     4     if(y==0)
     5         return x;
     6     else
     7         return gcd(y,x%y);
     8 }
     9 int main()
    10 {
    11     int N;
    12     scanf("%d",&N);
    13     while(N--)
    14     {
    15         int a[32800]={0};
    16         int i,j,num;
    17         int flag=0;
    18         scanf("%d",&num);
    19         for(i=2;i<num;i++)
    20         {
    21             if(num%i==0)
    22             {
    23                 for(j=i;j<num;j+=i)
    24                     a[j]=1;
    25             }
    26         }
    27         int count=0;
    28         for (int i = 0; i < num; ++i)
    29         {
    30             if(a[i]==0)
    31                 count++;
    32         }
    33         printf("%d
    ",count-1);
    34     }
    35 }
  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/a1225234/p/4603509.html
Copyright © 2011-2022 走看看