hdoj 1286 找新朋友 (尤拉函式)
阿新 • • 發佈:2018-12-11
找新朋友
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15913 Accepted Submission(s): 8501
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
思路:沒啥思路,尤拉函式,直接套
#include<stdio.h>
int euler(int n)
{
int sum=n;
int i;
for(i=2;i<=n;i++)
{
if(n%i==0)
{
sum=sum/i*(i-1);
while(n%i==0)
n/ =i;
}
}
if(n>1)
sum=sum/n*(n-1);
return sum;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
printf("%d\n",euler(n));
}
}