hihocoder #1865 : 最大公约数

题目

Solution

f [ i ] f[i] f[i]表示满足 g c d ( k 1 , k 2 , k 3 … ) = i gcd(k_1, k_2, k_3 … )=i gcd(k1,k2,k3)=i x x x个数
假设没有任何限制,那么 2 k 1 ⋅ 3 k 2 ⋅ 5 k 3 . . . 2^{k_1}\cdot 3^{k_2}\cdot 5^{k_3}... 2k13k25k3...可以表示所有数
所以 2 k 1 i ⋅ 3 k 2 i ⋅ 5 k 3 i . . . 2^{k_1i}\cdot 3^{k_2i}\cdot 5^{k_3i}... 2k1i3k2i5k3i...可以表示 g c d ( k 1 , k 2 , k 3 … ) = = 0 ( m o d i ) gcd(k_1, k_2, k_3 … )==0(mod i) gcd(k1,k2,k3)==0(modi) x x x个数

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T,i,j;
ll ans,f[60],n;
int main(){
	scanf("%d",&T);
	for (;T--;){
		scanf("%lld",&n);
		ans=n-1;
		for (i=59;i>1;i--){
			f[i]=pow(n,1.0/i)-1;
			for (j=i+i;j<60;j+=i) f[i]-=f[j];
			ans-=f[i];
		}
		printf("%lld\n",ans);
	}
}
posted @ 2018-11-05 16:47  Mingoal  阅读(15)  评论(0)    收藏  举报  来源