HDU 1787 GCD Again (欧拉函数)

来源:互联网 发布:重庆网络推广 编辑:程序博客网 时间:2024/05/20 09:23


<pre name="code" class="cpp">#include<iostream>//注意F(1)=1#include<stdlib.h>#include<time.h>#include<string.h>#include<cmath>#include<cstdio>#define inf 0x3f3f3f3f#define ll __int64using namespace std;ll oula(ll x){    ll i,tmp=x;    for(i=2;i*i<=x;i++)    {        if(x%i==0)        {            tmp=tmp/i*(i-1);            while(x%i==0)                x/=i;        }    }    if(x>1)        tmp=tmp/x*(x-1);    return tmp;}int main(){    ll n,m,i,j,k;    while(~scanf("%I64d",&n)&&n)    {        printf("%I64d\n",n-1-oula(n) );    }    return 0;}void euler()//打表求出所有数的欧拉函数   {      int i, j;      for(i = 2; i < MAX; i++)      {          if(!eu[i])           {              for(j = i; j < MAX; j += i)              {                  if(!eu[j]) eu[j] = j;                  eu[j] = eu[j]/i*(i-1);              }          }      }  } 

                                             
0 0
原创粉丝点击