posts - 99,  comments - 8,  trackbacks - 0

这题开始也不知道做,是看了别人的才AC的,感觉数论好高深的。
分析易知:x、y是大于n的;
设y = n + k ( k > = 1),则:x = n / k + n;  
所以本题关键是找到使x 为整数的k的个数,
由定理:任何一个正整数都可以表示成两个素数之积,所以本题就被转化成了求n ^2的素因子个数;
n = p1^e1 * p2^e2  * ......*pr^er;     其中p是< n 的素数
那么n 的素因子个数   (e1 + 1) * (e2 + 1) * (e3 + 1)*......

所以:n ^2的素因子数是  (2*e1+1) * (2*e2+1)* (2*e3+1)......
 1//为什么要把范围缩小到n的方根之内呢?? 
 2#include <stdio.h>
 3#include <stdlib.h>
 4#include <math.h>
 5# define MAXSIZE 40000
 6
 7int prime[MAXSIZE];
 8int primeElem[MAXSIZE];
 9int cn;          //0 -- n内素数的个数 
10
11void is_prime ( )
12{
13     for (int i = 2; i < MAXSIZE; i ++)
14     {
15         if ( !prime [i] )
16         {
17              for (int j = 2 * i; j < MAXSIZE; j += i)
18              {
19                  prime [j] = 1;
20              } 
21              //把 0 -- n 内的素数存到数组中 
22               primeElem[cn ++] = i;
23         }
24     }
25}
26
27int main ()
28{
29    int m, n;
30    is_prime( );
31   
32    while ( scanf ("%d", &m) != EOF )
33    {
34           for ( int i = 0; i < m; i ++)
35          {
36              scanf ("%d", &n); 
37              
38              //找到 n 以内的 素因子
39              int product = 1;
40              int flag = 0;
41              for ( int j = 0; j < cn; j ++)
42              {
43                  flag = (int) sqrt (n * 1.0) + 1;   //n 的 方根 
44                  if ( primeElem[j] > flag )  //p1、p2、p3  这些素数要 <  n 
45                  break;
46                  int e = 0;
47                  while ( n % primeElem[j] == 0 )
48                  {
49                        e ++;
50                        n /= primeElem[j];
51                  }
52                  product *= ( 1 + 2 * e);
53              } 
54              if ( n > 1 )
55              product *= 3;  //这步要注意,最后有可能剩下的n本身就是原来n的素因子  ????
56              printf ("Scenario #%d:\n", i+1);
57              printf ("%d\n", ( product + 1 )/2 );
58             
59              printf ("\n");
60          }
61    }
62      //system ("pause");
63      return 0; 
64}
65
posted on 2010-08-05 15:18 雪黛依梦 阅读(1354) 评论(0)  编辑 收藏 引用 所属分类: 数论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(4)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜