这一题我感觉是考验你的优化能力,一种方法(这题很不淡定,因为Case Wa了两次)。
代码:
#include<stdio.h> int main() { long long int n,i,j,sum,k ; int q=1 ; while(scanf("%lld",&n)!=EOF) { sum=0 ; for(i=1;i*i<=n;i++)// 找因子 只需找到sqrt(n) ;分两步:如果i*i!=n ; { // 再去找n/i 情况 例如:n=10 ,i=2时 分别找2和5的所有因子 if(n%i==0) { k=n/i ; for(j=1;j*j<=i;j++) if(i%j==0) { if(j*j!=i) sum+=2 ; else sum+=1 ; } } if(n%i==0&&k!=i) { for(j=1;j*j<=k;j++) if(k%j==0) { if(j*j!=k) sum+=2 ; else sum+=1 ; } } } printf("Case %d: %lld\n",q++,sum) ;//别忘了Case!!!!淡定! } return 0 ; }