找新朋友(http://acm.hdu.edu.cn/showproblem.php?pid=1286)

找新朋友

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


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<cstdio>
#include<cstring>
int euler(int n)//歐拉函數
{
	int res=n,a=n,i;
	for(i=2;i*i<=a;++i)
	{
		if(a%i==0) 
		  res=res/i*(i-1);
		while(a%i==0)
		a/=i;
	}
	if(a>1) res=res/a*(a-1);
//	printf("%d\n",a);
	return res;
}
int main()
{
	int a,n;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&a);
		printf("%d\n",euler(a));
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章