//公约数之和打表
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int a[200005]; int main() { memset(a,0,sizeof(a)); for(int i=1;i<=200000;i++) { for(int j=1;j*i<=200000;j++) { a[i*j]+=i; } } for(int k=1;k<10;k++) { cout<<a[k]<<endl; } }
抛n次硬币,求没有至少两次连续正面朝上有几种抛法,0代表反面朝上,1代表正面朝上
规律:dp[n]=dp[n-1]+dp[n-2]
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { int n; __int64 dp[100005][2]; while(~scanf("%d",&n)) { memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1;i<=n;i++) { dp[i][0]=(dp[i-1][0]+dp[i-1][1])% (1000000000 + 7); dp[i][1]=dp[i-1][0]% (1000000000 + 7); } cout<<(dp[n][0]+dp[n][1])% (1000000000 + 7)<<endl; } }