Case 15: 2ios
求小於等於n的數中最小公倍數等於N的組合並且 i<=j ;spa
#include<stack> #include<queue> #include<math.h> #include<vector> #include<string> #include<stdio.h> #include<map> #include<iostream> #include<string.h> #include<algorithm> #define maxn 1000005 #define maxm 10000005 #define MAXN 100005 #define MAXM 10005 #define mem(a,b) memset(a,b,sizeof(a)) #define ll unsigned long long #define inf 0x3f3f3f3f using namespace std; bool vis[maxm+5]; ll tot; ll p[maxn]; void get_prime(){ tot=0; mem(vis,true); for(ll i=2;i<=maxm;i++){ if(vis[i]){ p[tot++]=i; for(ll j=i*i;j<=maxm;j+=i)vis[j]=false; } } } ll f(ll n){ if(n==1)return 1; ll ans=1; for(int i=0;i<tot;i++){ if(n%p[i]==0){ ll x=0; while(n%p[i]==0){x++;n/=p[i];} ans*=(2*x+1); } } if(n!=1)ans*=(2*1+1); return ans/2+1; } int main(){ get_prime(); int t,test=0; scanf("%d",&t); while(t--){ ll n; scanf("%lld",&n); printf("Case %d: %lld\n",++test,f(n)); } }