![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<math.h> 5 #define mod 1000000007 6 long long dp[1010]; 7 void getdp() 8 { 9 memset(dp,0,sizeof(dp)); 10 dp[1]=1; 11 for(int i=2;i<=1000;i++) 12 { 13 for(int j=1;j<=i;j++) 14 { 15 if ((i-1)%j==0) dp[i]+=dp[j],dp[i]=dp[i]%mod; 16 } 17 } 18 return; 19 } 20 int main() 21 { 22 getdp(); 23 int cas=0; 24 int n; 25 while(~scanf("%d",&n)) 26 { 27 cas++; 28 printf("Case %d: %I64d ",cas,dp[n]); 29 } 30 return 0; 31 }
这是参考别人的思路,但是题目的思想很好,不舍得不写出来,附一篇好题解:
http://www.cnblogs.com/scau20110726/archive/2013/03/10/2953104.html