【ACM-ICPC 2018 南京赛区网络预赛 J】Sum
2018-09-05 14:35
615 查看
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
线性筛求出每个数的最小质因子x
for 从1-n
对于i,它的最小质因子为x
考虑i=ab
如果i能被x^3整除
那么这x怎么分配给它的两个因子a,b都不行,(都有一个因子会分配至少2个以上,那么我们提出来一个x^2的话,a或b就能被x^2整除了)。所以ans[i] = 0
如果i能被x^2整除(先判断x^3再判断x^2这样能保证x就只能被x^2整除),那么ans[i] = ans[i/(x^2)]
因为这个x显然只能分到两边去(a,b各分配一个,不能都分配到a或都分配到b)
所以答案和i/(x^2)的一样.i/(x^2)有多少个答按a'b',那么把a'和b'都各乘上x就ok
如果i只能被x整除
ans[i] = ans[i/x]*2
因为这个x有两种可能,分到a或者b。
所以i/x的每种方案a',b'。
加一个x乘在a'或者b'都能凑成i的方案.且乘1个x显然不会让它有平方因子。
ans[1]=1
然后按照上面的规则递推就好
(再求个前缀和
【代码】
/* N在const里面,可以改动; 求出2..N之间的所有质数; 放在zsb数组里面; 时间复杂度是O(N)的; 但是需要空间也是O(N)的; */ #include <bits/stdc++.h> using namespace std; const int N = 2e7; bool iszs[N + 10]; int mizs[N+10]; int ans[N+10]; vector <int> zsb; int main() { #ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", stdin); #endif memset(iszs, true, sizeof iszs); for (int i = 2; i <= N; i++) { if (iszs[i]) zsb.push_back(i); int len = zsb.size(); for (int j = 0; j <= len - 1; j++) { int t = zsb[j]; if (i*t > N) break; iszs[i*t] = false; mizs[i*t] = t; if (i%t == 0) break; } } ans[1] = 1; for (int i = 2;i <= N;i++){ int t = mizs[i]; if (t<=1000 && (i%(t*t*t)==0)){ ans[i] = 0; }else if (t<=10000&&(i%(t*t)==0)){ ans[i] = ans[i/(t*t)]; }else { ans[i] = ans[i/t]*2; } } for (int i = 2;i <= N;i++) ans[i] +=ans[i-1]; int T; scanf("%d",&T); while (T--){ int n; scanf("%d",&n); printf("%d\n",ans ); } return 0; }
相关文章推荐
- 【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
- 【ACM-ICPC 2018 南京赛区网络预赛 I】Skr
- 【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge
- ACM-ICPC 2018 南京赛区网络预赛 E题
- ACM-ICPC 2018 南京赛区网络预赛 J题
- ACM-ICPC 2018 南京赛区网络预赛 L题
- ACM-ICPC 2018 南京赛区网络预赛 G题
- 【ACM-ICPC 2018 南京赛区网络预赛 L】Magical Girl Haze
- 【ACM-ICPC 2018 沈阳赛区网络预赛 K】Supreme Number
- ACM-ICPC 2018 焦作赛区网络预赛 I题 Save the Room
- ACM-ICPC 2018 焦作赛区网络预赛 L 题 Poor God Water
- ACM-ICPC 2018 焦作赛区网络预赛 K题 Transport Ship
- 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire
- 【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics
- ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports
- ACM-ICPC 2018 焦作赛区网络预赛 B题 Mathematical Curse
- ACM-ICPC 2018 焦作赛区网络预赛 G题 Give Candies
- 【 ACM-ICPC 2018 沈阳赛区网络预赛 D】Made In Heaven
- ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 c题 sum