问题标题: 酷町堂:2685 条件

0
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者

2685:条件

Time Limit Exceeded:90分

汪宇航的测评结果:

测试点

结果

时间

 

1

Accepted

0ms

偷看一下数据

2

Accepted

0ms

偷看一下数据

3

Accepted

0ms

偷看一下数据

4

Accepted

0ms

偷看一下数据

5

Accepted

0ms

偷看一下数据

6

Accepted

0ms

偷看一下数据

7

Accepted

944ms

偷看一下数据

8

Time Limit Exceeded

2000ms

偷看一下数据

9

Accepted

964ms

偷看一下数据

10

Accepted

492ms

偷看一下数据

汪宇航的提交(cpp):

 
  • #include <iostream>
  • #pragma GCC optimize(3)
  • using namespace std;
  • int main(){
  • int N;
  • long long num=0;
  • cin>>N;
  • for(int i=1;i<=N;i++){
  • if(N%i==0){
  • num+=i;
  • }
  • }
  • cout<<num;
  • return 0;
  • }

0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

这题的数据达到了10^9,显然不能硬算

可以考虑枚举到sqrt(n),之后判断i是否是n的因数,如果是就num+=i,num+=n/i;  //如果i是n的因数,那么n/i也是是n的因数

当然,这样写只能得80分,因为还要考虑完全平方数

所以,核心如下

if(n%i==0){
            num+=i;
            if(i!=n/i) num+=n/i;
    }

 

0
汪宇航
汪宇航
新手启示者
新手启示者

教教我吧!!!

最高得分!!!

我要回答