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<iostream>
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<<endl;	
	}
	
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值