• 找新朋友(欧拉函数)


    找新朋友

    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 }
  • 相关阅读:
    常用的正则表达式,字符串,地址操作
    倒计时工具
    Java—集合框架List
    Java—包装类、Date和SimpleDateFormat、Calendar类
    Java—字符串
    Java —异常
    Java—多态
    Java—继承
    Java—封装
    Java —类和对象
  • 原文地址:https://www.cnblogs.com/a1225234/p/4603509.html
Copyright © 2020-2023  润新知