1/x+1/y=1/n 正整数解的个数(约数定理)

对于一个大于1正整数n可以分解质因数:n = p1^a1*p2^a2*......pk^ak,则n的正约数的个数就是  :(a1+1)*(a2+1)*......*(ak+1)

其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。


#include
using namespace std;
typedef long long int ll;
int main(){
	
	int T;
	scanf("%d",&T);
	
	while(T--){
		
		ll n;
		cin>>n;
		n=n*n;
		ll sum = 1; 
    	for(ll i = 2; i*i <= n; i++){ 
      		int cou = 0; 
      		if(n%i==0){ 
        		cou = 1; 
        		n /= i; 
        		while(n%i==0){ 
        			cou++; 
         	 		n /= i; 
        		} 
      		} 
      		if(cou != 0){ 
        		sum = sum*(cou+1); 
      		} 
   		}
		    
    	if(n != 1){ 
      		sum = sum*2;//剩下一个质数(1+1) 
    	} 
    	if(sum==1 && n==1){ 
      		sum = 1; 
    	}
		 
    	cout<<(sum-1)/2+1<

你可能感兴趣的:(————ACM相关————,——数学相关——,ACM,-,推公式)