互素:小明很喜欢学数学,并且喜欢做一些奇怪的题,这天他想知道对于给定的 N ,有多少个 M 满足“ M「N, gcd(N,M)==1, M 是偶数”。请你编写程序帮助小明解决这个问题。

题面描述

小明很喜欢学数学,并且喜欢做一些奇怪的题,这天他想知道对于给定的 N ,有多少个 M 满足“ M<N, gcd(N,M)==1, M 是偶数”。请你编写程序帮助小明解决这个问题。

输入数据

输入数据第一行为一个正整数 T ,表示测试数据的组数。 接下来的 T 组测试数据中, 每组测试数据为一行,包含一个整数 N (1≤T≤100, 1≤N≤10000 )。

输出数据

对于每一组输入数据,在单独的一行中输出 ”Case #id: M”, 表示第 id 组数据结果是 M , id 从 1 开始;

样例输入

4
1
2
11
23

样例输出

Case #1: 0
Case #2: 0
Case #3: 5
Case #4: 11

Hint:

gcd(a,b)==1 表示 a 与 b 的最大公约数为 1 ,即 a 与 b 互素。

心得:辗转相除法求最大公约数

def gcd(a, b):  #辗转相除法求最大公约数
    if b == 0:        
    	return a    
    else:        
    	return gcd(b, a%b)

T = int(input())  
for n in range(T) : 
    dArray = []      
    inputStr = input()      
    if inputStr != "":          
    	N = int(inputStr)          
    	M = 0          
    	for count in range(int((N+1)/2)-1):
    	    if gcd(N, (count+1)*2) == 1:
    	        M += 1          
    	print("Case #%d: %d" % (n + 1 , M))      
    else:
    	break  

猜你喜欢

转载自blog.csdn.net/tianxiefenxiang/article/details/107320421