摘要:刚开始时没考虑到时间问题,TLE 了好多次,刚开始是这样想的,先把素数筛出来,然后再找因为有几次TLE了,不得不换一种想法。在筛素数的时候就把相应素数的下表记下来,这样就省了好多时间下面贴代码#include<stdio.h> #include <string.h>#define max 1000000 int locat[max];int main(){ int i, j, n, m = 1; memset(locat, 0, sizeof(locat)); for (i = 2; i < max; ++ i) { if (locat[i]) continue;
阅读全文
摘要:简单数论题 直接暴力算法#include <stdio.h>__int64 search(__int64 n, __int64 m){ __int64 sum = 0; while (n != 1) { if (n % m == 0) { sum ++; n /= m; } else break; } return sum;}int main(){ __int64 n, a, b, c, d, sum; while (scanf("%I64d", &n) && n) { a = b = c = d = 1; a += search(n,
阅读全文
摘要:整数分解: 任何一个正整数都可以表示成素数的x次方之积,所以本题就被转化成了求n ^2的素因子个数; 先把n分解得到 n = p1^e1 * p2^e2 * ......*pr^er 其中p是< n 的素数那么n 的素因子, 则n的因子个数k =(e1 + 1) * (e2 + 1) * (e3 + 1)*...... 所以:n ^2的因子数是k = (2*e1+1) * (2*e2+1)* (2*e3+1)......这个题还要注意一点就是当n是素数的时候,很显然 k *= 3,这样做得到的结果是题目要求的2倍#include <stdio.h>#include <m
阅读全文