解题思路:以根号n为界缩小时间复杂度
注意事项:对自身进行判断
#include<iostream> #include<cmath> using namespace std; typedef long long ll; int is_z(ll n){//判断n是否是一个质数(是返回1,否则返回0) for(int i=2;i<=std::sqrt(n);i++){ if(n%i==0) return 0; } return 1; } int main() { int sum=0; ll n; cin>>n; for(int i=2;i<=std::sqrt(n);i++){ if(n%i==0){//(i是n的约数) if(is_z(i)) sum++;//(i是n的约数,且i是质数) if(is_z(n/i)&&(n/i)!=i) {//(判断另一个约数n/i是不是质数) sum++; } } } if(is_z(n)) {//(因为判断是从2开始,没有判断自身情况,在此补充) sum++; } cout<<sum; return 0; }
0.0分
4 人评分
字符串比较 (C语言代码)答案错误????浏览:642 |
C二级辅导-等差数列 (C语言代码)浏览:806 |
C语言训练-自守数问题 (C语言代码)浏览:799 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:420 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:606 |
字符逆序 (C语言代码)浏览:541 |
马拦过河卒 (C语言代码)浏览:1213 |
回文数(一) (C语言代码)浏览:1172 |
陶陶摘苹果2 (C++代码)浏览:578 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:518 |